Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wcf Datacontract与servicecontract的差异_Wcf - Fatal编程技术网

Wcf Datacontract与servicecontract的差异

Wcf Datacontract与servicecontract的差异,wcf,Wcf,据我所知- ServiceContract可用于接口/类,而DataContract b只能用于类、结构和枚举 除此之外,与这2项的其他区别是什么? 何时应在应用程序中使用DataContract和ServiceContract 任何样本或链接也可以。 提前感谢。服务合同定义了服务合同的形式和形式。它定义了服务的名称、XML名称空间等,它通常是一个接口(但也可以应用于类),其中包含用[OperationContract]属性修饰的方法-服务方法 [ServiceContract] public

据我所知-

ServiceContract可用于接口/类,而DataContract b只能用于类、结构和枚举

除此之外,与这2项的其他区别是什么? 何时应在应用程序中使用DataContract和ServiceContract

任何样本或链接也可以。
提前感谢。

服务合同定义了服务合同的形式和形式。它定义了服务的名称、XML名称空间等,它通常是一个接口(但也可以应用于类),其中包含用
[OperationContract]
属性修饰的方法-服务方法

[ServiceContract]
public interface IMyService
{
    [OperationContract]
    Response GetData(int someKey);
}
DataContract是一个完全不同的beast-它修饰一个类,将其定义为一个用作参数或从其中一个服务方法返回值的类。它将该类标记为一个“东西”,以便序列化到线路上传输它。它是WCF运行时(数据协定序列化程序)的一条指令,该类将用于WCF服务

[DataContract]
public class Response
{ 
    [DataMember] 
    int Key { get; set; }

    [DataMember] 
    string ProductName { get; set; }

    [DataMember] 
    DateTime DateOfPurchase { get; set; }
}

因此,服务契约和数据契约是两个完全独立的部分,它们共同发挥作用,使WCF服务发挥作用——这不是一个可以取代另一个或其他什么的。

好吧!很遗憾我不是一名C#开发者!C#太棒了!你的解释太令人吃惊了!很好的解释!是否有任何特定情况下您会使用
[ServiceContract]
装饰类,或者建议仅将其用于接口?@AlexanderDerck:如果您有一个定义服务的接口(这是一个建议,而不是一个要求),那么
[ServiceContract]
应该只在接口上。我在类上设置
[ServiceContract]
的唯一原因是该类定义并实现了服务(没有单独的接口)