1.服务端开发

1.1 WCF服务创建方式

创建一个WCF服务,总是会创建一个服务接口和一个服务接口实现。通常根据服务宿主的不同,有两种创建方式。

(1)创建WCF应用程序

通过创建WCF服务应用程序,可生成一个带.svc后缀名的文件。该文件与webform中的aspx文件类似,有后置代码,这些后置代码是服务接口的实现。这种方式创建的WCF服务都承载在IIS或WAS上。

(2)创建WCF服务库

WCF服务库是一个类库,如前所述包含一个服务接口和服务实现,此种方式创建的WCF服务可根据需要寄宿在windows客户端、windows服务、控制台程序等宿主上。

1.2 WCF服务的协议

协定定义了服务端可以提供的功能和客户端可以使用的功能,它独立于服务实现代码,可分为如下5种协定类型。

(1)数据协定

主要用于定义在服务端和客户端之间传输的复杂数据类型。对复杂数据类型定义数据协定,主要适用于客户端与服务端共享协定程序集的情况,而如果客户端是添加引用的方式来创建服务代理,则未必要专门定义数据协定。数据协定的类用[DataContract]特性标记,其内部要序列化的属性必须用[DataMember]特性标记。

注:webservice采用XML序列化,此种序列化只序列化公共字段和属性,因此如对复杂数据类型不特别定义数据协定,则会采用这种序列化方式。

(2)服务协定和操作协定

服务协定和操作协定是最重要的两个协定,创建一个WCF服务肯定有这两个协定。

服务协定用于定义描述了服务的WSDL,它通常为一个接口(也可以为一个类),用[ServiceContract]特性标明。操作协定在服务协定里面,定义了服务的操作,并用[OperationContract]特性标明。

ServiceContract和OperationContract有几个比较重要的属性,如下

协 定 属 性 描 述
ServiceContract SessionMode 定义该服务协定是否允许有会话,其值用SessionMode枚举定义,包括Allowed、NotAllowed、Required。
OperationContract IsOneWay 是否单向操作,单向操作时,客户端不会等待服务端的回应,一般可用于无返回值的操作。
IsInitiating 当前操作是否启动一个新会话。
IsTerminating 当前操作是否关闭会话。

(3)消息协定

可以指定传输的数据哪些是放在soap的标题中,哪些是在正文中。消息协定的数据类用[MessageContract]标明,类中放在soap标题和正文中的成员用[MessageHeader]和[MessageBodyMember]标明。

(4)错误协定

默认情况下,为了安全性,在服务端出现的错误不返回客户端,但也可以把包含有用信息的错误返回给调用者。若要将错误返回客户端,可在webConfig中将serviceDebug小节的includeExceptionDetailInFaults属性设为true。强类型化的soap错误协定可以用数据协定定义,并在相应操作协定中用[FaultContract]特性标明,并在该特性的属性中标明错误的类型。

1.3 WCF服务宿主

WCF的服务宿主比较丰富,可以是WAS(Windows Activation Service,Windows激活服务)、IIS、Windows应用程序、Windows服务、控制台应用程序等。

在创建WCF服务时,若创建的是WCF应用程序,则其服务后缀名带.svc,其宿主为IIS或WAS。若创建的是WCF服务库,则其通过实例化ServiceHost,并调用其对象的open()方法,可以寄宿在任意宿主上,且其相关绑定、端点等配置可以用写代码实现(给ServiceHost对象属性赋值),而不必在webConfig中进行配置()。

1.4 WCF服务的服务端配置文件

WCF服务端和客户端的配置都可以在其应用程序配置文件的“system.serviceModel”小节。该小节下的配置项主要由bindings、behaviors和services,其中bindings和behaviors是为services小节服务的。

(1)bindings

   bindings小节用来定义绑定,所定义的绑定可添加到service的endpoint小节的bindingConfiguration属性中。当然,该节也可以直接去掉,因为.net预定义了一些绑定,所以endpoint小节中直接使用这些预定义的绑定就可以了。

(2)behaviors

behaviors小节可定义客户端是否允许通过添加引用获取元数据,服务端报错时,客户端是否也允许看到报错等。

(3)services

services小节定义了所提供的服务,其下可以有多个service,每个service下主要有两个子节点:host和endpoint。host可定义服务的基地址,且如果服务要支持多种传输协议的话,也可以有多个基地址。服务端点需要配置服务的相对地址、绑定和服务协定(如果定义了特殊的绑定和行为,则还需将这些特殊的绑定和行为加进来)。而如果服务是自宿主的话,还需另加一个mex端点,用来客户端获取元数据。

*Wcf的配置,除了手动在应用程序的配置文件里配置外,VS还专门提供了一个可视化工具(WCF服务配置编辑器,在工具菜单下)来进行配置。

2.客户端开发

2.1 客户端引用

客户端通过生成WCF服务的代理,来调用服务所提供的一些方法。客户端生成代理的方式有两种:

(1)通过获取wsdl生成代理类:客户端通过vs添加引用,去访问服务端的WSDL文档,并生成一个代理类。

(2)通过共享协定程序集生成代理:客户端引用服务协定的程序集,通过使用ChanelFactory<TChanel>类写代码来生成服务代理,从而调用服务的方法。ChanelFactory<TChanel>类的构造函数需要传绑定信息和端点地址来进行实例化并创建信道,服务用完后,其对象还要调用close()方法关闭信道。

2.2 客户端配置

客户端需配置一个与服务端保持一致的端点(在client小节下),端点中需配置的属性包括服务地址、服务绑定、服务协定等。

WCF服务端开发和客户端引用小结的更多相关文章

  1. C# WCF服务端搭建和客户端调用

    1) 打开Visual Studio 2012,在菜单上点击文件->新建->项目->WCF服务应用程序.在弹出界面的"名称"对应的文本框中输入"WcfS ...

  2. WCF服务接口多,客户端在引用时出错!报WCF The maximum nametable character count quota (16384) has been exceeded while reading XML data错误

    WCF服务接口多,客户端在引用时出错!报WCF The maximum nametable character count quota (16384) has been exceeded while ...

  3. Delphi XE5通过WebService开发Web服务端和手机客户端

    Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices  stand-alone vcl applicati ...

  4. python网络编程TCP服务多客户端的服务端开发

    #服务多客户端TCP服务端开发 2 #方法说明 3 """ 4 bind(host,port)表示绑定端口号,host是ip地址,ip地址一般不进 行绑定,表示本机的任何 ...

  5. 网络编程之TCP客户端开发和TCP服务端开发

    开发 TCP 客户端程序开发步骤 创建客户端套接字对象 和服务端套接字建立连接 发送数据 接收数据 关闭客户端套接字 import socket if __name__ == '__main__': ...

  6. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  7. [发布]SuperIO v2.2.5 集成OPC服务端和OPC客户端

    SuperIO 下载:本站下载 百度网盘 1.修复串口号大于等于10的时候导致IO未知状态. 2.优化RunIODevice(io)函数内部处理流程,二次开发可以重载这个接口. 3.优化IO接收数据, ...

  8. 在线教学、视频会议 Webus Fox(2) 服务端开发手册

    上次在<在线教学.视频会议软件 Webus Fox(1)文本.语音.视频聊天及电子白板基本用法>里介绍了软件的基本用法.本文主要介绍服务器端如何配置.开发. 1. 配置 1.1 IIS配置 ...

  9. “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX

    "快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...

随机推荐

  1. 06-搭建master集群

    部署高可用 kubernetes master 集群 kubernetes master 节点包含的组件: kube-apiserver kube-scheduler kube-controller- ...

  2. Sublime Text3自定义全部字体大小、字体类型和背景颜色

    一.定义侧栏的背景颜色.字体大小和间距 Sublime Text3的Afterglow主题链接为:https://github.com/YabataDesign/afterglow-theme 1.按 ...

  3. 我从来不理解 JavaScript 闭包,直到有人这样向我解释它...

    正如标题所述,JavaScript 闭包对我来说一直有点神秘,看过很多闭包的文章,在工作使用过闭包,有时甚至在项目中使用闭包,但我确实是这是在使用闭包的知识. 最近看国外的一些文章,终于,有人用于一种 ...

  4. hdu 6127---Hard challenge(思维)

    题目链接 Problem Description There are n points on the plane, and the ith points has a value vali, and i ...

  5. ArrayList的实现原理

    ArrayList的线性复杂度是1.想确定一个数据,直接通过索引进行访问.实际上这个过程和数组是非常相似的.ArrayList在整个使用过程中,如果想要高效操作,最好设置一个数组的大小.在个数固定的情 ...

  6. 《java并发编程实战》

    目录 对本书的赞誉 译者序 前 言 第1章 简介 1.1 并发简史 1.2 线程的优势 1.2.1 发挥多处理器的强大能力 1.2.2 建模的简单性 1.2.3 异步事件的简化处理 1.2.4 响应更 ...

  7. SpringCloud断路器监控面板——Hystrix Dashboard

    一.简介 Hystrix Dashboard是Hystrix的一个组件,Hystrix Dashboard提供一个断路器的监控面板,可以使我们更好的监控服务和集群的状态,仅仅使用Hystrix Das ...

  8. CentOS7用阿里云Docker Yum源在线安装Docker

    一.参考文档 官方Docker安装文档:https://docs.docker.com/install/linux/docker-ce/centos 阿里云Docker安装文档:https://yq. ...

  9. mysql优化的21条经验(转)

    1. 为查询缓存优化你的查询大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个 ...

  10. Python程序每日一练习

    问题一:做为Apple Store App独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用Python如何生成200个激活码(或者优惠券)? 简介:通用唯一识别码(英语:Unive ...