【问题标题】:can we have operationcontract without datacontract in WCF?我们可以在 WCF 中拥有没有数据合同的操作合同吗?
【发布时间】:2012-10-24 22:02:04
【问题描述】:

当我们创建 WCF 服务时,我们有 SrviceContract (Interface)、OperationCONtract(Methods) 和 DataContract(Class types)。

我想知道我们是否可以在没有 DataContract 的情况下拥有 OperationContract。如果是,任何示例都会有很大帮助。

珍惜你的时间。

谢谢

【问题讨论】:

  • 是的,但它往往很脆,所以我不推荐它。为什么不想要数据合同?
  • 您可以查看stackoverflow.com/questions/5921635/…,了解是否在 WCF 中使用 DataContract。 @JonathanAllen 在使用 POCO 时避免使用 DataContract 之类的东西很有趣 :)

标签: asp.net asp.net-mvc wcf wcf-data-services


【解决方案1】:

DataContract 属性仅表示将在您的服务中的签名中使用的类。因此,如果您的服务不需要引用您的任何类,那么您将不会在任何地方拥有 DataContract 属性。

例如,如果您只有接受和返回原始类型(如字符串或数字)的方法,那么您就不必定义任何自己的类。

【讨论】:

    【解决方案2】:

    我不知道你为什么想要这个,但如果你只返回和/或传递原语和可空值(字符串、日期、int?s 等)和相同的列表/数组,你赢了不需要创建任何数据合同。您要传递的任何结构化数据都需要 DataContract 属性,否则将引发异常。

    所以,一些可行的例子是......

    [ServiceContract]
    public interface ISimpleContract
    {
        [OperationContract] void DoSomething();
        [OperationContract] int GetNumber();
        [OperationContract] string GetStatus(int userId);
        [OperationContract] string[] GetCodes(int? byDepartment);
        [OperationContract] List<int> GetNumberOfStrings(string[] strings); 
    }
    

    【讨论】:

    • 你甚至不需要一个接口,你可以把那些属性直接放在类上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2014-05-25
    • 2023-04-03
    相关资源
    最近更新 更多