使用共享类型创建Web服务和客户端

时间:2010-07-01 00:40:14

标签: c# web-services wsdl asmx wsdl.exe

我创建了两个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服务客户端,我可以在它们之间使用相同类型的对象。

非常感谢您的帮助。

2 个答案:

答案 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开关一起使用。

有关详细信息,请参阅Web Services Description Language Tool (Wsdl.exe)