我和这个问题有类似的问题.我有多个Web服务,我正在使用WCF,它们都共享类型.服务本身是用Java编写的,我无法访问它们.共享类型具有相同的签名,但svcutil.exe
在运行时会出现此错误:
Error: There was a validation error on a schema generated during export: Source: Line: 8 Column: 3 Validation Error: The complexType 'http://MyServer.MyService:CommonType' has already been declared.
凭借CommonType
其在这两个网络服务相同的签名被消耗.这就是我打电话的方式svcutil
:
svcutil.exe /o:GeneratedServices.cs /n:*,MyNamespace.Generated http://MyServer.MyService1?WSDL http://MyServer.MyService2?WSDL
我知道wsdl.exe
有/mergeTypes
标志,适用于这些服务,但我有一些选择svcutil.exe
,我真的很想使用.我确实有人证明我有可能,但是后端也使用.NET和WCF,而且我使用的Java后端也没有成功.
首先 - 它们完全一样吗?特别是,SOAP名称空间必须匹配(除了其他所有内容).如果他们不这样做,那么它们是不同的(不兼容的)类型; 您将不得不使用2个不同的引用(在不同的C#名称空间中以避免冲突),并在两种类型之间移位数据.
如果类型是相同的,它仍然无法正常工作,那么你也许可以使用/ R开关与SvcUtil工具从现有的装配消耗类型.尝试使用它一次以获取第一个类型(仅从1个URL) - 然后将该代码编译到程序集中.对第二个端点使用svcutil ,其中/ r标志标识您之前生成的程序集.
注意; 一个相关的主题是partial class
为一个或多个类型编写一个- 例如,为类型本身提供转换方法/运算符.这可能会使事情变得更简单.例如,您可以在不同名称空间中的两个相似类型之间编写隐式(或显式)静态转换运算符.