【发布时间】:2011-01-19 05:19:25
【问题描述】:
据我所知-
ServiceContract 可用于接口/类,而 DataContract 只能用于 Class、Struct 和 Enums
除此之外 - 这两个还有什么其他区别? 什么时候应该在应用程序中使用 DataContract 和 ServiceContract?
任何示例或链接也可以。 提前致谢。
【问题讨论】:
标签: wcf
据我所知-
ServiceContract 可用于接口/类,而 DataContract 只能用于 Class、Struct 和 Enums
除此之外 - 这两个还有什么其他区别? 什么时候应该在应用程序中使用 DataContract 和 ServiceContract?
任何示例或链接也可以。 提前致谢。
【问题讨论】:
标签: wcf
ServiceContract 定义了服务的合同——它的形状和形式。它定义了服务的名称、它的 XML 命名空间等,它通常是一个接口(但也可以应用于一个类),其中包含用 [OperationContract] 属性修饰的方法 - 服务方法。
[ServiceContract]
public interface IMyService
{
[OperationContract]
Response GetData(int someKey);
}
DataContract 是一个完全不同的野兽——它装饰一个类以将其定义为一个用作参数或来自服务方法之一的返回值的类。它将该类标记为“事物”以序列化到网络上以传输它。这是对 WCF 运行时(数据协定序列化程序)的说明,该类旨在用于 WCF 服务。
[DataContract]
public class Response
{
[DataMember]
int Key { get; set; }
[DataMember]
string ProductName { get; set; }
[DataMember]
DateTime DateOfPurchase { get; set; }
}
因此,服务合同和数据合同是两个完全独立的部分,它们共同作用以使 WCF 服务工作 - 它不像一个可以替代另一个或其他东西。
【讨论】:
[ServiceContract] 装饰一个类,还是建议只将它用于接口?
[ServiceContract]应该只在界面上。我在一个类上设置[ServiceContract] 的唯一原因是该类定义+实现一个服务(没有单独的接口)