代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

WCF数据协定,它们如何符合图片

wcf
  •  1
  • JL. Hans Passant  · 技术社区  · 15 年前

    我从代码示例中对数据契约进行了编码,并且我的服务正在运行,但我没有显式地设置数据契约。

    数据合同绑定到服务合同的绑定是什么?

    2 回复  |  直到 15 年前
        1
  •  2
  •   marc_s Anurag    15 年前

    任何复杂类型(即 int string )任何服务操作(标记为 [OperationContract] )需要一个 [DataContract] .

    服务操作/方法正在您的WSDL(Web服务描述语言)文件中转换为SOAP操作。传递的任何数据都必须是可以在XML模式(XSD文件)中表示的数据。对于int、string等,有一些基本的预定义的xsd类型,但除此之外的任何类型-a Customer 类型或您正在处理的任何类型都必须以可以转换为XSD模式的方式定义。

    记住:毕竟WCF服务被设计成与其他系统如Java、PHP和其他任何你可以想到的系统进行互操作。因此,服务合同中的所有内容——所有操作和正在操作的所有数据——都必须采用一种可以用WSDL(操作)和XSD(数据)文件表示的格式,这是公认的行业标准。

    现在,.NET3.5中的wcf非常明确-您必须定义类并用 [数据通道] 属性,以及那些类中要公开到WSDL/XSD文件(从而公开到服务定义)的任何字段或属性必须用 [DataMember] 属性。

    这能让事情更清楚一点吗?

    马克

        2
  •  1
  •   Eugene Osovetsky    15 年前

    默认情况下,DataContractSerializer用于序列化操作参数和返回值。例如,如果您在服务器上具有此功能:

    [OperationContract]
    SomeType DoSomething(SomeOtherType x);
    

    …然后,将使用DataContractSerializer反序列化SomeOtherType(将其从XML转换),然后序列化SomeType(将其转换为XML)

    DataContractSerializer可以理解许多不同的类型,但建议使用[DataContract]属性标记它来创建DataContractSerializer可以理解的类型。

    更多信息: http://msdn.microsoft.com/en-us/library/ms731923.aspx