我正在编写邮件服务的实现,我遇到了VisualStudio从wsdl文件自动生成的代码。 API包含相同对象的多个版本。对象在与特定版本对应的单独xsd文件中定义:
虽然每个xsd文件都定义了一个特定的命名空间,但复杂的元素名称在所有xsd文件中完全相同:
这会导致VisualStudio为表示复杂名称的类分配任意名称以保持唯一性:
如果查看xsd文件,OpenMailingGroup_13B会返回一个OpenMailingGroupResponse,而OpenMailingGroup_15A也会返回一个OpenMailingGroupResponse,而IMHO从定义的角度来看是可以的,因为它们是在单独的xsd文件中定义的,每个文件都有自己独立的命名空间。但是,当VisualStudio生成代理类时,它将OpenMailingGroup_13B的返回类型命名为OpenMailingGroupResponse2,将OpenMailingGroup_15A的返回类型命名为OpenMailingGroupResponse4。
当您更新Web服务引用并添加和删除新版本时(例如,现在存在新的OpenMailingGroup_17X),这将成为一个问题。问题是VisualStudio现在会为OpenMailingGroupResponse使用不同的命名。什么是OpenMailingGroupResponse4 for OpenMailingGroup_15A不能是OpenMailingGroupResponse9。这打破了我们的代码。
我们想到了一些可能的解决方案:
所以,我的问题是:我可以告诉VisualStudio将生成的代码拆分成多个.NET命名空间,每个命名空间对应于它的xsd文件吗?也许一般的问题是:我能做些什么吗?
提前致谢,
Tiberiu