我想使用gsoap访问多个Web服务,并将它们全部合并为1个可执行文件。我遇到的问题是即使我在多个wsdl上执行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标头SOAPAction的值:
如果我只编译单个wsdl(仅编译Service2 wsdl),则访问Service2上的服务的代码相同。
然后我检查Service1和Service2 wsdls。它们具有相同的“targetNamespace”。这就是为什么只创建了1个代理。
我的问题是:我该如何解决这个问题?我需要访问Service1.wsdl和Service2.wsdl上的服务,并将它们放入1个二进制文件中。
我读过gsoap手册&在wsdl2h和soapcpp2的命令行参数上尝试了几种组合,但没有运气。
非常感谢任何帮助。
我使用gsoap 2.8.11 btw
答案 0 :(得分:0)
这个问题已经很老了,所以我会非常快速地帮助随机的googlers(我在google搜索解决同样的问题时找到了它)。如果需要更多细节,请询问。
无论如何,解决方案: 使用 -q 参数(提供名称空间名称)对 wsdl2h 进行多次调用,并每次生成唯一的.h文件。 然后,在每个头文件上调用 soapcpp2 - 这将为每个头文件生成代理文件,包含在名称空间声明中。