跳转到内容

.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 服务由三个组件组成:一个服务,它实现要提供的服务;一个主机环境,服务运行在其中;以及一个或多个端点契约

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”来指定模式是单向消息模式。

双工消息模式

[编辑 | 编辑源代码]

双工消息模式的工作原理与请求/回复模式相同,只是服务器和客户端彼此独立地发送消息,而请求/回复模式中的请求和回复是同一个过程的一部分。

一个 WCF 服务代码示例

[编辑 | 编辑源代码]
[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>

参考资料

[编辑 | 编辑源代码]
  1. http://msdn2.microsoft.com/en-us/library/ms733127.aspx
  2. http://msdn2.microsoft.com/en-us/library/ms733127.aspx
华夏公益教科书