Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重用来自另一个服务引用的现有类_C#_.net_Web Services_Service Reference - Fatal编程技术网

C# 重用来自另一个服务引用的现有类

C# 重用来自另一个服务引用的现有类,c#,.net,web-services,service-reference,C#,.net,Web Services,Service Reference,我现在的工作环境不太理想,所以请容忍我 我们将使用外部(非.NET)SOAP Web服务 出于某种原因,每个方法都是在一个单独的web服务中实现的,使用它自己的WSDL web服务返回的许多对象具有完全相同的设计、名称和xml命名空间 使用“添加服务引用””是因为: -内部开发团队已经习惯了它 -我们希望保留自动“更新服务引用” 第二个引用添加了“在所有引用的程序集中重用类型”选项。 所有类在新引用下再次生成 如果打开服务引用的reference.svcmap(要找到它,请选中“显示所有文件”并

我现在的工作环境不太理想,所以请容忍我

我们将使用外部(非.NET)SOAP Web服务
出于某种原因,每个方法都是在一个单独的web服务中实现的,使用它自己的WSDL
web服务返回的许多对象具有完全相同的设计、名称和xml命名空间

使用“添加服务引用””是因为:
-内部开发团队已经习惯了它
-我们希望保留自动“更新服务引用”

第二个引用添加了“在所有引用的程序集中重用类型”选项。
所有类在新引用下再次生成


如果打开服务引用的reference.svcmap(要找到它,请选中“显示所有文件”并展开服务引用)并手动编辑,而不是通过GUI设置WSDL URI,则可以添加多个WSDL。例如

  <MetadataSources>
    <MetadataSource Address="http://localhost/example1.wsdl" Protocol="http" SourceId="1" />
    <MetadataSource Address="http://localhost/example2.wsdl" Protocol="http" SourceId="2" />
  </MetadataSources>


当您在一个服务引用中有多个WSDL时,类将按照您所描述的那样重用,只要它们在不同的WSDL中是相同的。如果存在名称相同但定义不同的类,其中一个类的名称后面会附加一个“1”后缀。

您的意思是像数据类一样重用类吗?可能不会,因为每个客户机代理都位于自己的命名空间中。如果要共享公共数据对象,您真正需要做的是手工编写客户端代理类或创建自己的客户端代理生成器。NET确实使做这类事情变得相当容易。您甚至可以利用T4之类的工具来帮助生成代码。我的意思是数据类和手头的问题是idd每个代理的名称空间。我将如何创建自己的客户端代理生成器?可能是的副本。您是否尝试过svcutil.exe/r?谢谢,正是我所需要的!具有相同名称但定义不同的类的处理方式如下:ClassName,ClassName1。您是否知道控制后缀(“eg”而不是“1”)的方法?您可以尝试编写自己的客户端代理生成器。当您发现一个类以“1”结尾时,请将其更改为您喜欢的后缀。我在svcmap中只有1个WSDl in 1服务引用,但它仍在生成一些带有1个后缀的属性。原因可能是什么?有什么想法吗?@batmaci有时候旧文件会导致这种情况。如果您感到困扰,您可以从该文件夹中删除Reference.svcmap之外的所有项目,确保它们都已从项目中删除,删除Reference.svcmap文件中对它们的所有引用(您应该看到它们的一个部分),然后更新服务引用。它应该干净地重新生成文件。@TimS。我终于明白了为什么它一直在我身边。我包含了xsd文件和由它们生成的代理类,我的那些包含的代理类与父代理类/xsd具有不同的名称空间。所以我刚刚对名称空间进行了均衡,效果很好。不再有多个带有1个后缀的属性。