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