WCF消息交换应用方式技巧分享

WCF开发插件的出现为我们带来了许多不一样的体验。而且其在实际应用中起到了非常重要的作用。在这里我们将会为大家详细介绍一下其中一个比较重要的基础知识,WCF消息交换的应用技巧。

10年积累的网站设计、做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先建设网站后付款的网站建设流程,更有和平免费网站建设让你可以放心的选择与我们合作。

客户端和服务之间通过消息交换(Message Exchange)来完成方法调用和数据传递,WCF消息交换拥有三种定义方式。

WCF消息交换之1. Request/Reply

这是缺省模式,又称为同步调用。在调用服务方法后需要要等待服务消息的返回。

 
 
 
  1. Public Class Service1  
  2. Implements IService1  
  3. Public Sub Run() Implements IService1.Run  
  4. Threading.Thread.Sleep(4000) '停四秒  
  5. End Sub  
  6. End Class 

客户端调用

 
 
 
  1. Dim s As New ServiceReference1.Service1Client  
  2. s.Open()  
  3. Console.WriteLine("开始执行时间: {0}", Now.ToString)  
  4. s.Run()  
  5. Console.WriteLine("结束执行时间:{0}", Now.ToString)  
  6. s.Close()  
  7. Console.ReadKey() 

运行结果#t#

开始执行时间: 2009-11-06 16:53:51

结束执行时间:2009-11-06 16:53:55

相差了四秒了。

WCF消息交换之2.one-way模式

这种方式在调用方法后会立即返回,非常类似于异步行为。不过需要注意的是one-way只能用在过程方法是,而不用于函数。

接口定义如下,实现不用更改

 
 
 
  1. < ServiceContract()> _  
  2. Public Interface IService1  
  3. < OperationContract(isoneway:=True)> _  
  4. Sub Run()  
  5. End Interface 

我们来看一下运行结果:

开始执行时间: 2009-11-06 16:58:28

结束执行时间:2009-11-06 16:58:28

马上就返回了结果

注意使用此模式,不得声明输出参数、引用参数或返回值。

WCF消息交换之3. duplex

这种模式相对复杂一些,我们详细描述一下步骤:

(1).设计标准的服务契约。为了完成回调操作,我们必须指定SessionMode和回调类型

 
 
 
  1. < ServiceContract(SessionModeSessionMode:=SessionMode.Required,
     callbackcontract:=GetType(ICallback))> _  
  2. Public Interface IService1  
  3. < OperationContract(isoneway:=True)> _  
  4. Sub Run(ByVal name As String)  
  5. End Interface 

设置回调接口类型。由于回调方法在客户端执行,因此无须加ServiceContractAttribute属性。对于回调操作,服务器无须获取返回消息,因此添加isOneWay:=True特性参数。

 
 
 
  1. Public Interface ICallback  
  2. < OperationContract()> _  
  3. Sub [Call](ByVal t As DateTime)  
  4. End Interface 

实现服务契约,通过OperationContext.Current.GetCallBackChannel可以获取回调委托,进而完成调用。

 
 
 
  1. Public Class Service1  
  2. Implements IService1  
  3. 'ICallback callback = OperationContext.Current.
    GetCallbackChannel< ICallback>();  
  4. Dim callback As ICallback = OperationContext.Current.
    GetCallbackChannel(Of ICallback)()  
  5. Public Sub Run(ByVal name As String) Implements IService1.Run  
  6. Threading.Thread.Sleep(1000) '停四秒  
  7. Me.callback.Call(Now)  
  8. Console.WriteLine("Run Time " & Now.ToString)  
  9. End Sub  
  10. End Class 

这时运行时,会出现以前异常:

System.InvalidOperationException: 协定需要双工,但是绑定“WSHttpBinding”不支持它或者因配置不正确而无法支持它。

需要更改服务器的配置文件:

< endpoint address ="" binding="wsHttpBinding" contract="异步.IService1">中的wsHttpBinding改为wsDualHttpBinding,客户端重新更新服务器引用即可

客户端实现:

 
 
 
  1. Sub Main()  
  2. Dim s As New ServiceReference1.Service1Client(New 
    System.ServiceModel.InstanceContext(New ContractCallback))  
  3. Console.WriteLine("开始执行时间: {0}", Now.ToString)  
  4. s.Run("aa")  
  5. Console.WriteLine("结束执行时间:{0}", Now.ToString)  
  6. Console.ReadKey()  
  7. End Sub  
  8. Public Class ContractCallback  
  9. Implements ServiceReference1.IService1Callback  
  10. Public Sub [Call](ByVal t As Date) Implements 
    ServiceReference1.IService1Callback.Call  
  11. IO.File.Delete("c:\1.xml")  
  12. Console.WriteLine("Call AppDomain:" & AppDomain.
    CurrentDomain.FriendlyName)  
  13. Console.WriteLine("Server DateTime:" & t.ToString)  
  14. End Sub  
  15. End Class 

小结:  

运行没有问题,但是 Call 方法,并没有进行打印,也没有删除C盘下面的1.xml文件。百思不得其解,同时反现不知道怎么调试服务端。这次虽然按照网上博客实现了三种消息传递的方式,但是没有理解其中的奥秘。

以上就是对WCF消息交换的具体介绍。

分享标题:WCF消息交换应用方式技巧分享
标题网址:http://www.shufengxianlan.com/qtweb/news38/276088.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联