在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]设置命名空间?我真的很想避免为许多服务手动设置它,它很好地将它放在数据合同的一个位置。 由于数据协定有一个程序集级命名空间属性,我希望服务合同也有一个......
答案 0 :(得分:5)
不,您不能 - 您必须在WCF中非常明确,并且必须在每个ServiceContract上显式设置名称空间等内容。我甚至可能会在每一个DataContract上做这件事 - 只是为了清楚我在做什么。
但是,这是件好事!明确也会使你的意图变得清晰 - 相信我,在一个复杂的系统中,这会有所帮助!马克