个人学习WCF笔记(2)

创建服务协定的基本规则:

  1.定义服务协定:在类或接口上使用SeveicerContractAttribute属性标记。

  2.定义服务操作:在方法上使用OperationContractAttribute 属性对其进行标记

  3.参数和返回值:

    每个操作都有一个返回值和一个参数,即使它们为void。可以使用局部方法将对对象的引用从一个对象传递到另一个对象,但与 局部方法不同的是,服务操作不会传递对对象的引用, 它们传递的只是对象的副本。

    这一点很重要,这是因为参数或返回值中使用的每个类型都必须是可序列化的,换言之,该类型的对象必须能够转换为字节流,并能够从字节流转换为对象。

    默认情况下,基元(.NET内部的类型包括整形,字符型等等)类型是可序列化的,.NET Framework 中的很多类型都是可序列化的。、

创建服务协定-服务操作的消息模式:(消息模式有三种:请求/答复,单向,双工)

  1.请求/答复:通过请求/答复模式,请求发送方(客户端应用程序)将接收与请求相关的答复。这是默认的模式,因为它既支持传入操作(一个
或多个参数传递到该操作中),也支持返回操作(该操作将一个或多个输出值传回给调用方)。

    缺点: 如果执行操作需要很长的时间,则会降低客户端性能和响应能力
    优点: 响应消息中可返回SOAP 错误,这表明可能在通信或处理中发生了一些与服务有关的错误状况

   2.单向:如果WCF 服务应用程序的客户端不必等待操作完成,并且不处理SOAP 错误,则该操作可以指定单向消息模式。
       单向操作是客户端调用操作并在WCF 将消息写入网络后继续进行处理的操作。通常这意味着,除非在出站消息中发送的数据极
其庞大,否则客户端几乎立即继续运行(除非发送数据时出错)。此种类型的消息交换模式支持从客户端到服务应用程序的类似于事件的行为。
        若要为返回void 的操作指定单向消息交换,请将IsOneWay 属性设置为true,默认为false.

       此方法与前面的请求/答复示例相同,但是,将IsOneWay属性设置为true 意味着尽管方法相同,服务操作也不会
发送返回消息,而客户端将在出站消息抵达通道层时立即返回。

  3.双工:双工模式的特点是,无论使用单向消息发送还是请求/答复消息发送方式,服务和客户端均能够独立地向对方发送消息。对于必须
直接与客户端通信或向消息交换的任意一方提供异步体验(包括类似于事件的行为)的服务来说,这种双向通信形式非常有用
      由于存在与客户端通信的附加机制,双向模式比请求/答复或单向模式要略为复杂
      若要设计双工协定,还必须设计回调协定,并将该回调协定的类型分配给标记服务协定的ServiceContractAttribute 属性(attribute)
的CallbackContract 属性(property)。
      若要实现双工模式,您必须创建第二个接口,该接口包含在客户端调用的方法声明

 创建数据协定(就是参数数据的格式是什么)
  面向服务的应用程序(例如Windows Communication Foundation(WCF) 应用程序)设计为与Microsoft 平台和非 Microsoft 平台上的
最大可能数量的客户端应用程序进行互操作。

  为了获得最大可能的互操作性,建议您使用DataContractAttribute 和DataMemberAttribute 属性对您的类型进行标记,以创建数据协定。
   数据协定是服务协定的一部分,用于描述您的服务操作交换的数据。

创建数据协定的约束: 

  数据协定是可选的样式协定:除非您显式应用数据协定属性,否则不会序列化任何类型或数据成员
   数据协定与托管代码的访问范围无关:可以对私有数据成员进行序列化,并将其发送到其他位置,以便可以公开访问它们
   WCF 处理用于启用操作功能的基础 SOAP 消息的定义,并处理数据类型到消息正文的序列化和从消息正文进行的反序列化。数据类型一旦序列化,您就无需在设计操作时考虑基础消息交换基础结构
  可以使用其他序列化机制。标准ISerializable, SerializableAttribute和IXmlSerializable 机制都可用于处理数据类型到基础SOAP 消息的序列化,这些消息可将数据类型从一个应用程序带到另一个应用程序

 

posted @ 2012-03-14 16:26  舍鱼  阅读(180)  评论(0编辑  收藏  举报