WCF分布操作应对特定操作情况
创始人
2024-06-23 22:50:43
0

WCF应用方式多变化,灵活性非常强,能够帮助开发人员解决许多需求问题。不过它的高灵活性同时也带来了应用上的困难。下面我们先来一起了解一下WCF分布操作的应用,以帮助我们初步了解这方面的知识。

WCF分布操作(Demarcating Operation)方法,以应对服务契约的操作需要指定执行顺序的情况。分步操作是使用OperationContract特性的IsInitiating和IsTerminating属性:

  1. [AttributeUsage(AttributeTargets.Method)]   
  2. public sealed class OperationContractAttribute : Attribute   
  3. {   
  4. public bool IsInitiating   
  5. {  
  6. get;set;  
  7. }   
  8. public bool IsTerminating   
  9. {get;set;} //More members   
  10. }  

一个WCF分布操作的应用如下:

 

  1. [ServiceContract(SessionModeSessionMode = SessionMode.Required)]   
  2. interface IOrderManager   
  3. {   
  4. [OperationContract]   
  5. void SetCustomerId(int customerId);   
  6. [OperationContract(IsInitiating = false)]   
  7. void AddItem(int itemId);   
  8. [OperationContract(IsInitiating = false)]   
  9. decimal GetTotal( );   
  10. [OperationContract(IsInitiating = false,IsTerminating = true)]  
  11.  bool ProcessOrders( );   
  12. }  

此时,操作AddItem()、GetTotal()以及ProcessOrder()都不能是启动会话的第一个操作。同时,ProcessOrder()操作则会成为终止会话的操作。这与业务的要求是一脉相承的。 #t#

IsInitiating属性的默认值为true,IsTerminating属性的默认值则为false。

如果IsInitiating值为true,并不必然代表该操作必然是启动会话的第一个操作。如果其它相同设置的操作首先被调用,就会启动一个会话,而原操作则在调用时被加入会话,成为会话的一部分。但如果IsTermination的值为true,则代表该操作必须是终止会话的操作。虽然在服务契约定义时,允许将多个操作的IsTerminating值设置为true,但一旦调用了IsTerminating值为true的方法,就不能再调用服务实例的其它方法,除非在客户端重新创建一个代理对象。此外,即使操作的IsTermination值为true,它也可以是启动会话的第一个操作,但在操作执行后它会终止会话。因此,如下的两个操作定义是等效的:

  1. [OperationContract(IsTerminating = true)]  
  2.  void StartAndEndSession();   
  3. [OperationContract(IsInitiating=true, IsTerminating = true)]   
  4. void StartAndEndSession();  

 

然而,如下的两个操作则是不等效的,因为后者要求该操作不能为启动会话的第一个操作:

 

  1. [OperationContract(IsTerminating = true)]   
  2. void StartAndEndSession();   
  3. [OperationContract(IsInitiating=false, IsTerminating = true)]   
  4. void StartAndEndSession();  

以上就是对WCF分布操作的相关介绍。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...