Architecture 服务和数据合同的最佳实践-WCF

Architecture 服务和数据合同的最佳实践-WCF,architecture,wcf,Architecture,Wcf,我知道我可以对ServiceContract(如Name,Namespace)属性和OperationContract(Action,ReplyAction)应用多个选项 这同样适用于DataContract(Namespace)和DataMember(IsRequired,Name,Order) 如何确定是否需要应用特定选项。我应该遵循的最佳实践/惯例是什么?没有要求或标准 这些属性提供了选项,增加了MS提供的静态规范满足您需求的可能性 因此,我想说的是,最佳实践是了解这些选项以及如何将它们应

我知道我可以对
ServiceContract
(如
Name
Namespace
)属性和
OperationContract
Action
ReplyAction
)应用多个选项

这同样适用于
DataContract
Namespace
)和
DataMember
IsRequired
Name
Order


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

没有要求或标准

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

因此,我想说的是,最佳实践是了解这些选项以及如何将它们应用于您的需求。

这里没有“最佳实践”。只要理解所有不同的参数都是用来做什么的

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

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

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

  • Order
    只需更改属性在元数据/XML中的显示顺序;通常情况下,大多数人不会为此烦恼,除非出于兼容性原因需要


@Aaronaught-名称空间是否与服务将承载的URL有任何关系?我知道我可以指定我想要的任何名称空间,但我不确定使用与web主机所在位置相同的名称空间是否是一种好的做法。@DotnetDude:不,不是真的。名称空间应该是唯一的标识符,它将您的
awesome服务
与其他所有人的
awesome服务
区分开来。如果您碰巧有一个真实的生产URL,那么使用它(我有)不会有什么坏处,但这不是一个要求。命名空间和名称会影响生成的xml的形状,并最终影响另一端的反序列化对象。名称对于在WCF中公开重载方法很有用。