WCF响应服务基本应用技巧分享

WCF中有很多比较有用的应用技巧,需要我们在不断的学习和实践中去积累经验,来达到一个熟练操作的程度。在这里我们就先为大家详细介绍一下有关WCF响应服务的一些基本应用技术,希望能给大家带来一些帮助。#t#

十余年的商州网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整商州建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联从事“商州网站设计”,“商州网站推广”以来,每个客户项目都认真落实执行。

到目前为止,我们所介绍的排队调用的编程模型是单侧的:客户端向队列发布单向消息,再由服务处理该消息。如果排队的操作真的就是单向调用,那么这种模型足以满足要求。然而,排队服务有时候需要反过来向其客户端报告调用的结果、返回的结果,甚至是错误。但在默认情况下,这是无法实现的。Windows Communication Foundation 将排队调用与单向调用等同起来,而单向调用在本质上是禁止任何此类响应的。此外,排队服务(及其客户端)可能未处于连接状态。如果客户端发布对未连接服务的排队调用,则当服务最终获得并处理这些消息时,可能不会有客户端来接收值,因为客户端可能早已离线了。这一问题的解决方案是让服务将报告返回给客户端所提供的排队服务。我将此类服务称作WCF响应服务。

响应服务就是系统中的另一个排队服务。它同样可能与客户端断开连接并由单独的进程或单独的计算机进行托管,或者它也可能共享客户端的进程。如果响应服务共享客户端的进程,则当客户端启动时,响应服务即开始处理排队的响应。将响应服务由独立于客户端的进程(甚至是计算机)托管有助于进一步将响应服务的生存期与使用该响应服务的客户端相分离。

设计WCF响应服务合约

就如使用任何 Windows Communication Foundation 服务一样,客户端和服务需要预先商定响应合约及其适用对象(例如返回的值和错误信息,或仅仅是返回的值)。请注意,您也可将响应服务拆分为两个服务,一个用于响应结果,另一个用于响应错误。例如,假定有如下由排队 MyCalculator 服务所实现的 ICalculator 合约:

 
 
 
  1. [ServiceContract]  
  2. interface ICalculator  
  3. {  
  4. [OperationContract(IsOneWay = true)]  
  5. void Add(int number1,int number2);  
  6. ... //更多操作  
  7. }  
  8. [ServiceBehavior(InstanceContextModeInstanceContextMode =  
  9. InstanceContextMode.PerCall)]  
  10. class MyCalculator : ICalculator {...} 

要求 MyCalculator 服务以计算结果来响应客户端并报告所有错误。计算结果为整数形式,错误以 Windows Communication Foundation ExceptionDetail 数据合约形式表示。对于响应服务,可按下列方式定义 ICalculatorResponse 合约:

 
 
 
  1. [ServiceContract]  
  2. interface ICalculatorResponse  
  3. {  
  4. [OperationContract(IsOneWay = true)]  
  5. void OnAddCompleted(int result,ExceptionDetail error);  

支持 ICalculatorResponse 的WCF响应服务需要检查返回的错误信息,在方法结束时通知客户端应用程序、用户或应用程序管理员,并将结果提供给相关方。下面是一个支持 IcalculatorResponse 的简单响应服务:

 
 
 
  1. [ServiceBehavior(InstanceContextModeInstanceContextMode = 
    InstanceContextMode.PerCall)]  
  2. class MyCalculatorResponse : ICalculatorResponse  
  3. {  
  4. [OperationBehavior(TransactionScopeRequired = true)]  
  5. public void OnAddCompleted(int result,ExceptionDetail error)  
  6. {  
  7. MessageBox.Show("结果 = " + result,"MyCalculatorResponse");  
  8. if(error != null)  
  9. {  
  10. //处理错误  
  11. }  
  12. }  

实现 MyCalculator 和 MyCalculatorResponse 会直接引出两个问题。***个问题是同一响应服务可能会被用于处理多个排队服务上多个调用的响应(或完成),而 MyCalculatorResponse(更重要的是其所服务的客户端)无法区分这些响应。这一问题的解决方案是让发出原始排队调用的客户端向该调用分配某个***的 ID 作为标记。排队服务 MyCalculator 需要将该 ID 传递给 MyCalculatorResponse,使其能够应用与该 ID 相关的某种自定义逻辑。

第二个问题是排队服务如何发现WCF响应服务的地址。与双向回调不同的是,Windows Communication Foundation 内部并不支持将响应服务引用传递给服务。而将该地址放入服务主机配置文件中(客户端一节中)并不是明智之举,因为同一排队服务可能会被多个客户端调用,而每个客户端都有其自身专用的响应服务和地址。

一种可能的解决方案是将客户端所管理的 ID 和所需的响应服务地址作为参数基于排队服务合约明确传递给每个操作:

 
 
 
  1. [ServiceContract]  
  2. interface ICalculator  
  3. {  
  4. [OperationContract(IsOneWay = true)]  
  5. void Add(int number1,int number2,  
  6. string responseAddress,string methodID);  

同样,排队服务也可以将WCF响应服务的方法 ID 作为参数基于排队响应合约明确传递给每个操作:

 
 
 
  1. [ServiceContract]  
  2. interface ICalculatorResponse  
  3. {  
  4. [OperationContract(IsOneWay = true)]  
  5. void OnAddCompleted(int result,ExceptionDetail error,  
  6. string methodID);  

网站名称:WCF响应服务基本应用技巧分享
网站URL:http://www.gawzjz.com/qtweb/news19/195819.html

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

广告

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