.NET Framework 3.0/Windows Communication Foundation 简介
Windows Communication Foundation (代号:Indigo) 是一个新的 Windows Vista 框架,旨在简化计算机或网络中多个计算机之间的应用程序通信。
它是 .NET Framework 3.0 中引入的四个主要应用程序开发接口之一。它与 Microsoft Windows XP、Windows 2003、Windows Longhorn Server 和 Microsoft Windows Vista 兼容。
Windows Communication Framework (WCF) 结合了 .NET Remoting、Web 服务、分布式事务和消息队列的功能。
WCF 使用 SOAP 消息进行通信。当 WCF 进程与非 WCF 进程通信时,SOAP 消息使用基于 XML 的编码,但当它与另一个 WCF 进程通信时,SOAP 消息使用优化的二进制格式进行编码。
WCF 服务由三个组件组成:一个服务,它实现要提供的服务;一个主机环境,服务运行在其中;以及一个或多个端点或契约。
WCF 提供了统一性、互操作性和面向服务的开发。
有三种不同的契约类型正在使用
- 服务契约
- 数据契约
- 操作契约
服务契约是指整个服务。
服务契约与 Web 服务不同,它只是服务的一部分。
.
服务契约是一组被指定为操作的类。服务契约具有“服务契约”标签,如以下示例所示。
[ServiceContract] interface IMa {
它通过不同的类执行多个操作。每个类都被指定为一个“操作”。
类可以用作服务契约,但通常建议使用接口。将类用作“服务契约”的优点包括速度和简单性。但是,管理类不支持继承,无法同时运行服务契约的所有操作。
在服务契约中使用参数是有益的,因为服务契约通常传递值而不是对值的引用。服务契约使用的原始数据类型默认情况下是可序列化的。
数据契约通常用于指定契约中使用的数据成员。数据成员用“数据成员”属性标记。未指定为“数据成员”的成员是允许的,但它们不属于契约的一部分,也不能被实现。
语法
DataContract 属性的语法是
[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Struct|AttributeTargets.Enum, Inherited=false, AllowMultiple=false)] public sealed class DataContractAttribute : Attribute
示例
[DataContract] public class CustomerDetails { //Serialized Member// [DataMember] public string CustomerName; //Serialized Member// [DataMember] private int Age; // This is not serialized because the DataMemberAttribute // has not been applied. private string CustomerMailID; }
操作契约是服务契约的组成部分。服务契约中的每个方法都用操作契约属性标记。只有被指定为操作的方法才被视为服务的一部分。
语法
[AttributeUsageAttribute(AttributeTargets.Method)] public sealed class OperationContractAttribute : Attribute
除了这三种契约类型之外,还有消息契约,它允许我们输入参数或返回值。消息契约使序列化数据变得更容易,因此不需要详细了解 SOAP。
要显示为 SOAP 标头的组件将使用 MessageHeader 属性指定,而 SOAP 主体成员将使用 MessageBodyMember 属性指定。
语法
[MessageContract] public class ABC { [MessageHeader] A; [MessageHeader] B; [MessageBodyMember] C; [MessageBodyMember] D; [MessageBodyMember] E; }
WCF 编程模型中指定了三种类型的契约
- 请求/回复消息模式
- 单向消息模式
- 双工消息模式
请求/回复消息模式是指客户端的请求后面跟着服务器的回复。在这里,客户端可以将参数值发送到服务器,同时服务器可以将返回值传递给客户端。
但是,这种模式有很大的弊端。如果函数没有顺序,那么每个语句都被视为请求或回复。这将包括那些不返回值的语句。
在这里,客户端发出请求,服务器做出响应,客户端函数无论服务器是否收到任何消息。
在这里,服务不需要关心 SOAP 错误。通常,服务不会等待应用程序处理。
单向消息模式与请求-回复模式相同,只是我们将“IsOneWay”属性设置为“true”来指定模式是单向消息模式。
双工消息模式的工作原理与请求/回复模式相同,只是服务器和客户端彼此独立地发送消息,而请求/回复模式中的请求和回复是同一个过程的一部分。
[ServiceContract] class HelloService { [OperationContract] [PrincipalPermission(SecurityAction.Demand, Role = “Adminstrators")] [TransactionFlow(TransactionFlowOption.Mandatory)] [OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)] String Hello(String Greeting) {return Greeting;} } <bindings> <wsHttpBinding> <binding name="Binding1“ transactionFlow="true"> <security mode="Message"> <message clientCredentialType="Windows“/> </security> <reliableSession enabled="true" /> </binding> </wsHttpBinding> </bindings>