WCF学习进阶篇

    代码中的所有例子都可在hi.csdn.net/heroyuchao中下载
WCF 进阶篇
一、 宿主
在上一篇中我们的服务的宿主程序是一个控制台程序,同样我们也可以把服务发布在IIS上,Windows服务上,下面我就讲下如何发布在IIS上:
我继续使用上一篇中的Hello,World程序,把控制程序部分代码删除,
这是这样:

同时我们在添加一个.svc文件

这个文件是不是很像.asmx,呵呵,就是一样的。这样我们的程序就能部署在IIS上了。

 

一、 传递用户自定对象
我们知道用webservie传递用户定义对象必须是可以序列化的。
下面我通过一个下订单的例子讲述下如何实现WCF间的对象传递:

首先我们定义了一个契约IMyService,它只有一个方法PushOrder,方法要求客户端传一个order对象,服务端根据这个order对象输出orderid,因此服务端必须对order进行一些定义,这个order我们称为数据契约即[DataContract],order中的字段orderid就是数据成员[DataMember]。配制的要求同基础篇一样。

我们再看看客户端:

客户端添加服务引用后的代理文件会比helloworld多出一个order类的定义:

 

 

 

 

调用代码是这样的:

运行后服务端的控制台显示如下:

 

一、 绑定多个contract
一个服务中可以同时发布多个Contract,但是我们在配制文件中可以看到一个EndPoint中只能加上一个Contract,所以要发布多个Contract需求多个EndPoint,现在我们将上面的例子增加一个Contract。
[ServiceContract]
Public interface IOtherContract
{
   [OperatorContract]
   String OnTest();
}
OnTest 方法也就是返回个“hello,world”
这个接口由MyService类来实现,这样我们发布一个服务就拥有两个Contract,先来看看Config是如何写的

再看看服务端的完整代码:

主函数的写法与其它例子是一样的。

客户端添加一下服务引用,就会生成代理,在代理文件中会有两个contract,客户分别定义下不同contract的对象就能访问各自contract中的方法了。

 

一、 一个Contract多个地址
上节的例子中是多个Contract对应多个EndPoint,同样我们也可以实现一个Contract多个Endpoint,例如我们可以发布一个Contract在内网中
使用TCP协议,在internet中使用Http协议,这样客户端就有一双向的选择,服务端没有什么改动只是多加了个EndPoint,而客户端是如何调用的呢?
我们注意下添加的代理文件:

看到了吧,一个MyServiceClient类有多个构造函数,我们用第二个MyServiceClient(string endpointConfigurtionName)就行了,其中endpointConfigurationName就是客户端配制文件中endpoint节点的名称

 

一、 服务行为
在服务端我们除了可以定义Contract以外,我们还可以对Contract进行一些行为定义。我们现在通过一个SDK文档中的例子进行讲解。
直接看代码吧:
 
上面的段代码定义了两个Contract,这两个Contract都是由类CalculatorService实现的,但是这个类的头上我们加了个[ServiceBehavior(InstanceContextMode=InstanceContentMode.Single)]
这就是一种服务行为,这个行为定义了服务对象是Single模式,也就是所有的客户端都将使用相同的对象访问服务方法,这就有点像Web程序中的Application对象,它是应用程序级的。InstanceContentMode还有两个值
PerCall: 如果程序设置了PerCall,也就是告诉服务端,客户端发起的每次方法调用都使用不同的服务对象。
PerSession :看名字就知道了,它一定是与Web程序中的Session相似,是会话级,在WCF中一次会话是客户端定义一个服务访问对象到使用close方法关闭使用对象。所以如果客户端在生命期间内不关闭服务访问对象,使用的都是相同的会话通道即同一个服务器对象。
在进阶篇中我只介绍一个服务行为,在高级篇中我还会继续介绍服务行为。
 
后续的议题会是WCF的可靠性,分布式事务处理,回调客户端方法,脱机调用服务方法等。
                              待续...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值