WCF对于开发人员来说是一个比较重要的开发插件,可以帮助我们轻松的实现一些特定的功能。在这里我们就先来了解一下WCF配置绑定的相关内容。通过编程方式或管理方式都可以WCF配置可靠性(以及有序传递)。如果我们启用了可靠性,则客户端与服务宿主端必须保持一致,否则客户端无法与服务通信。我们可以只对支持它的WCF配置绑定。例所示的服务端配置文件,使用了绑定配置节,启用了TCP绑定的可靠性。
例:启用TCP绑定的可靠性
- < system.serviceModel>
- < services>
- < service name = "MyService">
- < endpoint address = "net.tcp://localhost:8000/MyService"
binding = "netTcpBinding" bindingConfiguration = "ReliableTCP"
contract = "IMyContract"/>- < /service>
- < /services>
- < bindings>
- < netTcpBinding>
- < binding name = "ReliableTCP"> < reliableSession enabled = "true"/>
- < /binding>
- < /netTcpBinding>
- < /bindings>
- < /system.serviceModel>
至于编程配置方式,TCP绑定和WS绑定提供了略微不同的属性来实现WCF配置绑定。例如,NetTcpBinding绑定接受一个Boolean型的构造函数参数,用来启动可靠性:
- public class NetTcpBinding : Binding,...
- {
- public NetTcpBinding(...,bool reliableSessionEnabled);
- //更多成员
- }
我们只能在对象的构造期间启用可靠性。如果通过编程方式设置可靠性,需要创建支持可靠性的绑定对象:
- Binding reliableTcpBinding = new NetTcpBinding(...,true);
NetTcpBinding定义了只读的ReliableSession类,通过它获取可靠性的状态:
- public class ReliableSession {
- public TimeSpan InactivityTimeout {get;set;}
- public bool Ordered {get;set;}
- //更多成员 }
- public class OptionalReliableSession : ReliableSession {
- public bool Enabled {get;set;}
- //更多成员 }
- public class NetTcpBinding : Binding,... {
- public OptionalReliableSession ReliableSession {get;}
- //更多成员 }
理论上,服务代码和契约定义应该与它使用的绑定及属性无关。服务不应该考虑绑定,在服务代码中也不应该包含它所使用的绑定。不管WCF配置绑定是哪一种,服务都应该能够正常工作。然而实际上,服务的实现或者契约本身都会依赖于消息的有序传递(Ordered Delivery)。为了帮助契约或服务的开发者能够约束支持的绑定,WCF定义了DeliveryRequirementsA。
【编辑推荐】