2010-08-04 116 views
4

在设计我的服务时,我决定自定义出现在生成的WSDL中的名称空间。使用ContractNamespace属性设置WCF DataContract名称空间

对于DataContracts,我遇到ContractNamespace属性,这似乎是一个很好的快捷方式,可以明确地为每个DataContract设置相同的名称空间。我最初的尝试是这样的:

[assembly:ContractNamespace("http://types.mycompany.com/2010/08/03")] 
namespace MyCompany.MyContracts 
{ 
    [DataContract] 
    //...multiple datacontract classes here 
} 

令我惊讶的是,这并没有奏效。经过多次修补之后,我终于成功地将该属性的ClrNamespace属性设置为等于我的CLR名称空间(示例中的MyCompany.MyContracts)。所以像这样的东西

[assembly:ContractNamespace("http://types.mycompany.com/2010/08/03", 
      ClrNamespace="MyCompany.MyContracts")] 

我的问题是:为什么这不工作的第一种方式?我的期望是,通过不指定CLR namepsace,这个属性会影响程序集范围内的所有数据协议。

回答

4

如果我没有弄错,如果ClrNamespace被省略,那么契约命名空间设置适用于全局命名空间中的对象。

+0

是的,它清除它。我甚至不熟悉全球名字 – Michael 2010-08-04 20:58:36