在WCF中有一种方法可以在程序集范围内设置ServiceContract命名空间吗?

时间:2009-08-18 19:45:45

标签: .net wcf web-services

在WCF中,您可以为具有[DataContract]的任何内容指定名称空间前缀,如下所示:

[DataContract(Namespace="MyApp")] public class whatever...

但是,如果您想要在程序集范围内对所有数据协定应用公共命名空间,则可以使用ContractNamespaceAttribute

/* in AssemblyInfo.cs */
[assembly: ContractNamespace("MyApp", ClrNamespace = "MyApp")]

/* in whatever.cs */
[DataContract] public class whatever...

太好了,工作正常。现在,在ServiceContract端,我可以在服务接口上执行相同的命名空间设置:

[ServiceContract(Namespace="MyApp")] public interface whateverService...

但是有没有类似于[assembly:ContractNamespace]的东西可以用来为所有[ServiceContract]设置命名空间?我真的很想避免为许多服务手动设置它,它很好地将它放在数据合同的一个位置。 由于数据协定有一个程序集级命名空间属性,我希望服务合同也有一个......

1 个答案:

答案 0 :(得分:5)

不,您不能 - 您必须在WCF中非常明确,并且必须在每个ServiceContract上显式设置名称空间等内容。我甚至可能会在每一个DataContract上做这件事 - 只是为了清楚我在做什么。

但是,这是件好事!明确也会使你的意图变得清晰 - 相信我,在一个复杂的系统中,这会有所帮助!

马克