【问题标题】:Best practice for Service and data contracts - WCF服务和数据合同的最佳实践 - WCF
【发布时间】:2011-01-22 23:18:16
【问题描述】:

我知道我可以将多个选项应用于ServiceContract(如NameNamespace)属性和OperationContractActionReplyAction

DataContract (Namespace) 和 DataMember (IsRequired, Name, Order) 也是如此。

如何确定是否需要应用特定选项。我应该遵循的最佳做法/惯例是什么?

【问题讨论】:

    标签: architecture wcf


    【解决方案1】:

    这里没有一个“最佳实践”。只需了解所有不同参数的用途。

    • 如果您希望服务的“公共”名称不同于实际的类名称,则应指定Name(大多数人不会更改此名称)。数据合同也是如此 - 如果您希望通过 SOAP/MEX 公开的名称与您在内部使用的属性名称不同,请使用它。

    • Namespace 是您应该更改的内容,否则默认为 tempuri.org - 您应该将其替换为与您的应用程序相关的命名空间。

    • 如果类型可以为空(即string),则应指定IsRequired,但该字段实际上是合同的一部分(例如,客户必须有一个名字......必填字段)。

    • Order 只是更改属性在元数据/XML 中出现的顺序;通常大多数人不会为此烦恼,除非出于兼容性原因需要这样做。

    【讨论】:

    • @Aaronaught - 命名空间是否与托管服务的 URL 有任何关系?我知道我可以指定任何我想要的命名空间,但不确定拥有与网络主机所在位置相同的命名空间是否是一个好习惯。
    • @DotnetDude:不,不是。命名空间应该是一个唯一标识符,可以将您的AwesomeService 与其他所有人的AwesomeService 区分开来。如果您碰巧有一个真实的生产 URL,那么使用它不会伤害您(我愿意),但这不是必需的。
    • 名称空间和名称会影响生成的 xml 的形状,并最终影响线路另一端的反序列化对象。
    • Name 对于在 WCF 中公开重载方法很有用。
    【解决方案2】:

    没有要求或标准。

    属性提供选项,增加 MS 提供的静态规范满足您需求的可能性。

    所以,我想说最好的做法是了解选项以及如何将它们应用于您的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      相关资源
      最近更新 更多