服务和数据契约的最佳实践 - WCF

6

我了解到,可以对ServiceContract(如 NameNamespace)属性应用多个选项,对于 OperationContract(如 ActionReplyAction)也是一样。

DataContractNamespace)和 DataMemberIsRequiredNameOrder)同样适用这种方式。

那么,我该如何确定是否需要应用某个特定选项?有哪些最佳实践/约定我应该遵循?

2个回答

8

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

  • Name应该被指定,如果你想让你的服务的“公共”名称与实际类名不同(大多数人不改变这个)。数据契约也是类似的——如果您想要在SOAP/MEX上公开的名称与您在内部使用的属性名称不同,请使用它。

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

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

  • Order仅更改属性在元数据/XML中出现的顺序;通常,除非由于兼容性原因而需要,否则大多数人都不会费心去做这件事。


1
@Aaronaught - 命名空间与服务将托管在的URL是否有关系?我知道我可以指定任何命名空间,但不确定将命名空间设置为与Web主机所在位置相同是否是一种好的做法。 - DotnetDude
1
@DotnetDude:不是真的。 命名空间只是一个唯一标识符,用于区分您的“AwesomeService”和其他人的“AwesomeService”。 如果您恰好拥有真实的生产URL,则使用它不会对您造成伤害(我这样做),但这不是必需的。 - Aaronaught
命名空间和名称会影响生成的 XML 的形状,最终也会影响到另一端的反序列化对象。 - Sky Sanders
1
名称对于在WCF中公开重载方法非常有用。 - DaveB

0

没有要求或标准。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接