【问题标题】:Datacontract and servicecontract differenceDatacontract和servicecontract的区别
【发布时间】:2011-01-19 05:19:25
【问题描述】:

据我所知-

ServiceContract 可用于接口/类,而 DataContract 只能用于 Class、Struct 和 Enums

除此之外 - 这两个还有什么其他区别? 什么时候应该在应用程序中使用 DataContract 和 ServiceContract?

任何示例或链接也可以。 提前致谢。

【问题讨论】:

    标签: wcf


    【解决方案1】:

    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 服务工作 - 它不像一个可以替代另一个或其他东西。

    【讨论】:

    • 好吧!我很遗憾我不是 C# 开发人员! C# 太棒了!你的解释太棒了!
    • 很好的解释!是否有任何特定情况可以用[ServiceContract] 装饰一个类,还是建议只将它用于接口?
    • @AlexanderDerck:如果您拥有一个定义服务的接口(这是推荐 - 不是要求),那么[ServiceContract]应该只在界面上。我在一个类上设置[ServiceContract] 的唯一原因是该类定义+实现一个服务(没有单独的接口)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    相关资源
    最近更新 更多