1

我想使用 gsoap 访问多个 Web 服务并将其全部组合成 1 个可执行文件。我遇到的问题是即使我在多个 wsdls 上执行 wsdl2h,然后使用 soapcpp2 编译标头,也只生成了 1 个代理对象。以下是我使用的命令行参数:

wsdl2h -o header.h -ttypemap.dat -s http://services.web.com/WebService/Service1.asmx?WSDL http://services.web.com/WebService/Service2.asmx?WSDL
soapcpp2 -pMy  -i -wx -C -Igsoap-2.8/gsoap/import header.h

我遇到的问题是,每当我尝试访问 Service2 wsdl 中定义的服务时,都会出现异常。“System.Web.Services.Protocols.SoapException:服务器无法识别 HTTP Header SOAPAction 的值:

如果我只编译单个 wsdl(只编译 Service2 wsdl),则访问 Service2 上的服务的代码相同。

然后我检查 Service1 和 Service2 wsdls。它们具有相同的“targetNamespace”。这就是为什么只创建 1 个代理。

我的问题是:我该如何解决这个问题?我需要访问 Service1.wsdl 和 Service2.wsdl 上的服务并将它们放入 1 个二进制文件中。

我已经阅读了 gsoap 手册并在 wsdl2h 和 soapcpp2 的命令行参数上尝试了几种组合,但没有运气。

任何帮助深表感谢。

我使用 gsoap 2.8.11 顺便说一句

4

1 回答 1

0

这个问题已经很老了,所以我会很快帮助随机的谷歌用户(我在谷歌搜索相同问题的解决方案时发现了它)。如果需要更多详细信息,请询问。

无论如何,解决方案:使用-q参数(提供命名空间名称)多次调用wsdl2h并每次生成唯一的 .h 文件。然后,在每个头文件上调用soapcpp2 - 这将为每个头文件生成代理文件,并包装在命名空间声明中。

于 2013-06-20T15:33:38.447 回答