C# 重命名服务引用的部分

C# 重命名服务引用的部分,c#,wcf,wsdl,wcf-client,C#,Wcf,Wsdl,Wcf Client,我需要访问一个基于Java的服务,该服务在它导入的一个模式文件所使用的相同名称空间中定义了一个portType元素。不幸的是,该模式包含一个与端口类型同名的complexType 问题是,“添加服务引用”使用portType的名称来创建服务契约的名称,并使用complexType的名称创建一个class,并在相同的.NET命名空间中创建它们。那不行 是否可以在“添加服务引用”对话框或.svcmap文件中“重命名”服务合同类型 一个密切相关的问题是-如果portType和complexType在

我需要访问一个基于Java的服务,该服务在它导入的一个模式文件所使用的相同名称空间中定义了一个
portType
元素。不幸的是,该模式包含一个与
端口类型同名的
complexType

问题是,“添加服务引用”使用
portType
的名称来创建服务契约的名称,并使用
complexType
的名称创建一个
class
,并在相同的.NET命名空间中创建它们。那不行

是否可以在“添加服务引用”对话框或.svcmap文件中“重命名”服务合同类型



一个密切相关的问题是-如果
portType
complexType
在不同的名称空间中(依我所知,它们应该在不同的名称空间中),我能做些什么吗?

在Visual Studio中,您可以在解决方案资源管理器中选择您的项目,并且在顶部有一小组图标。从右侧将鼠标悬停在这些文件上,您将发现一个名为“显示所有文件”的文件。这将显示隐藏的文件,比如由服务引用创建的类(现在您应该有箭头来展开它)


您可以完全控制这些类。您可以重命名它们,将它们放在不同的名称空间中,等等。

您可以按照dustinmorris的建议编辑生成的类。但是,如果您需要更新服务引用,这将成为问题,因为它将重新生成这些类

更好的办法是按照您的建议将它们分成两个不同的名称空间,这样就行了


最好的解决方案可能是修复java服务(如果可能的话),并为两个冲突项提供更有意义的名称,这样服务就更容易理解。

不幸的是,我认为简短的答案是“否”

甚至有可能说服Java服务的维护者从他们的接口中消除歧义吗?如果是这样的话,我建议尽可能地为这一变化进行游说,因为你的其他选择并不是那么好:

您可以尝试使用.svcmap文件中的
ExcludedTypes
元素强制服务引用不生成与
portType
冲突的
complexType
。如果您确实需要使用该
complexType
,则需要手动实现它,这是一个麻烦

您可以手动编辑
Reference.cs
文件,以更改冲突类型之一的名称,正如其他人所建议的那样。但是,维护代码的每个人都需要记住,每次重新生成服务引用时都要执行此手动编辑,这是一个麻烦

您可以在.svcmap文件中使用
NamespaceMappings
元素,但它只允许您重命名整个名称空间,而不允许重命名该名称空间中的单个类型,这是一个麻烦

您可以手动创建服务契约接口(假设这是从
portType
生成的类型),然后使用.svcmap文件中的
ServiceContractMappings
元素使用该类型,而不是自动生成它。但是,当然,您必须手动维护该接口,这很糟糕。(如果您无法说服服务维护人员更改其服务,这可能是最好的选择)。

您无法完全控制这些类。下次执行“更新服务引用”时,它们将被覆盖。编辑生成的代码几乎总是一个坏主意。