2010-07-01 113 views
5

我创建了两个带有从xsd模式文件导入的共享类型的wsdl文件。使用共享类型创建Web服务和客户端

之后,我使用带有参数/ serverInterface的wsdl.exe工具生成的接口创建了Web服务。

第一个Web服务,通​​过系统“A”使Web方法“RegisterData”将一些复杂的待处理对象放入队列中。由于此方法返回布尔值(告诉我们该对象已注册成功)。

第二个Web服务,使用web方法“UpdateData”更新系统“B”中基于同一对象的一些数据,并且在系统“A”上进行了更改。

因此,在系统“A”中,我必须为第二个Web服务创建客户端,我将在这里使用此修改的复杂对象us参数调用方法“UpdateData”。

但是当我在Visual Studio中创建此客户端时(通过添加Web引用或添加服务引用),我必须为客户端创建一些名称空间。然后,当我试图调用“UpdateData”agument对于从第一个Web服务“RegisterData”方法接收到的同一对象有不同的名称空间时。

我想创建第一个Web服务和第二个Web服务客户端,我可以在它们之间使用相同类型的对象。

非常感谢您的帮助。

回答

4

我不相信这是ASMX网络服务的可能性。

但是,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。它工作得很好。

+0

你有什么例子或有关该方法的任何物品? – Siekiera 2010-07-02 10:49:14