我创建了两个wsdl文件,其中包含从xsd模式文件导入的共享类型。
之后,我使用wsdl.exe工具生成的界面和参数/ serverInterface创建了Web服务。
Frist Web服务,通过系统“A”将Web方法“RegisterData”放入队列中一些复杂的对象进行处理。由于此方法返回布尔值(告诉我们对象已注册成功)。
第二个Web服务,使用Web方法“UpdateData”基于同一个对象更新系统“B”中的某些数据,并在系统“A”上进行了更改。
所以在系统“A”中我必须为第二个Web服务创建客户端,我将使用这个修改过的复杂对象us参数调用方法“UpdateData”。
但是当我在Visual Studio中创建这个客户端时(通过添加web引用或添加服务引用),我必须为客户端创建一些命名空间。然后,当我试图调用“UpdateData”时,agument对从第一个Web服务“RegisterData”方法接收的同一个对象有不同的命名空间。
我想创建第一个Web服务和第二个Web服务客户端,我可以在它们之间使用相同类型的对象。
非常感谢您的帮助。
答案 0 :(得分:5)
我不相信ASMX Web服务可以实现这一点。
但是,WCF支持这一点。
WCF链接:
实际上,我想我可能误解了你的问题。我虽然你试图在客户端和服务器之间共享相同的类型。 ASMX无法做到这一点。但是,您似乎尝试在两个客户端代理之间共享相同的类型。您可以使用WSDL.EXE工具轻松完成此任务。
考虑一个模式,DataTypes.xsd和两个导入它的WSDL文件,ServiceA.wsdl和ServiceB.wsdl。要创建服务器接口,请使用:
wsdl / serverInterface /n:SharedTypes.Servers /out:Services.cs ServiceA.wsdl ServiceB.wsdl DataTypes.xsd
这将创建您可以实现的接口,以便创建您的服务。这些接口将使用从DataTypes.xsd创建的一组类。要创建代理类,只需使用:
wsdl /n:SharedTypes.Proxies /out:Proxies.cs ServiceA.wsdl ServiceB.wsdl DataTypes.xsd
请注意,您不需要/sharedTypes
开关。这有不同的目的。当您需要从服务下载WSDL和任何XSD时,它用于组合外部服务类型。
我尝试使用像你这样的例子,ServiceA将消息发布到队列中,然后客户端接收该消息并将其发送到ServiceB。它运作得很好。
答案 1 :(得分:0)
我同意通过VS Web Reference功能无法做到这一点。要满足您的要求,可以将wsdl.exe实用程序与/ sharetypes开关一起使用。