提问人:John Saunders 提问时间:2/14/2014 最后编辑:John Saunders 更新时间:2/3/2015 访问量:1705
重命名服务引用的各个部分
Renaming Parts of a Service Reference
问:
我需要访问一个基于 Java 的服务,该服务在它导入的其中一个架构文件使用的同一命名空间中定义了一个元素。不幸的是,该架构包含与 !portType
complexType
portType
问题在于,“添加服务引用”使用 的名称来创建服务协定的名称,并使用 - 的名称创建一个,并在同一个 .NET 命名空间中创建它们。那行不通!portType
class
complexType
在“添加服务引用”对话框或 .svcmap 文件中,是否可以执行一些操作来“重命名”服务协定类型?
一个密切相关的问题是 - 如果 和 位于不同的命名空间中(恕我直言,它们应该是)中,我能做些什么吗?portType
complexType
答:
在 Visual Studio 中,可以在解决方案资源管理器中选择项目,顶部有一小部分图标。从右侧将鼠标悬停在它们上,您会找到一个名为“显示所有文件”。这将显示隐藏文件,例如由服务引用创建的类(现在您应该有箭头来展开它)。
您可以完全控制这些类。您可以重命名它们,将它们放在不同的命名空间中,等等。
评论
您可以按照 dustinmorris 的建议编辑生成的类。但是,如果需要更新服务引用,这将成为问题,因为它将重新生成这些类。
更好的做法是按照您的建议将它们拆分为 2 个不同的命名空间,这样就可以了。
最好的解决方案可能是尽可能修复 java 服务,并为两个冲突的项目提供更有意义的名称,以便服务更易于理解。
不幸的是,我认为简短的回答是“不”。
有没有可能试图说服 Java 服务的维护者从他们的界面中消除歧义?如果是这样,我建议尽可能努力地游说这一变化,因为你的其他选择不是那么好:
您可以尝试使用 .svcmap 文件中的元素来强制服务引用不生成与 .如果你真的需要使用它,你需要手动实现它,这真是太可惜了。ExcludedTypes
complexType
portType
complexType
您可以手动编辑文件以更改冲突类型之一的名称,正如其他人所建议的那样。但是,维护代码的每个人都需要记住在每次重新生成服务引用时执行此手动编辑,这真是太可惜了。Reference.cs
您可以使用 .svcmap 文件中的元素,但它只允许您重命名整个命名空间,而不能重命名该命名空间中的单个类型,这很糟糕。NamespaceMappings
您可以手动创建服务协定接口(假设这是从 生成的类型),然后使用 .svcmap 文件中的元素来使用该类型,而不是自动生成它。但是,当然,您必须手动维护该界面,这真是太可惜了。(这可能是最好的选择,IMO,如果你无法说服服务维护者改变他们的服务)。portType
ServiceContractMappings
评论