读书人

不久前在整个WebService闹了好几天同

发布时间: 2013-07-04 11:45:55 作者: rapoo

最近在整个WebService,闹了好几天同时调用多个服务没整出来,求坛子里的同志救救~~~
先把情况说下,用的是gsoap 2.8.
有两个WebService服务,ServiceA,和ServiceB,WebService是没有问题的,正常可是使用。我通过gSoap生成的了这两个服务的头文件ServiceA.h,ServiceB.h
wsdl2h -n serv_a -N SerA -s -o ServiceA.h xxx.wsdl
wsdl2h -n serv_b -N SerB -s -o ServiceB.h xxx.wsdl
然后我手动把生成的这两个头文件合并,把ServiceB.h的内容合并到了ServiceA.h
然后gSoap生成其余的文件
soapcpp2 -L -C -x ServiceA.h
最后添加到工程里,发现ServiceA能够调用,但是ServiceB就不行,调用ServiceB时居然告诉我:
“没有有效的操作参数,无法处理请求。请提供有效的SOAP操作”。
但是单独生成ServiceB相关的文件又是可以调用。两个头文件合并成一个头文件是手动处理的,确保内容都合并了。
~~哪位童鞋知道是怎么回事吗?不久前在整个WebService,闹了好几天同时调用多个服务没整出来,求坛子里的同志救救~
[解决办法]
就保留两套服务器的代码, 把他们编译成两个 dll 来调用不行么? 非要合并?
[解决办法]
那有只能仔细检查你的合并了.
如果把两个服务器的文件直接加进去一起编译会有许多函数重定义吧
[解决办法]
你的问题应该是linux/unix下程序调用webservice吧? 是不是生成的调用头文件里面包含的webservice各个函数都有一个命名空间
如果使用多个文件关联生成时候命名空间是随机的 所以你才分开手动生成每一个再手动合并的? 我之前是这个问题

wsdl2h *.wsdl -e -o CallWebservice.h -t typemap.dat

如typemap.dat中有这一行

Query = "http://bbss.chinaunicom.com"

Query后边地址为wsdl的定义的命名空间地址 在wsdl文件中的wsdl:definitions targetNamespace 的内容

这样批量将所有的wsdl文件生成到CallWebservice.h文件里,其中原本应该是动态生成的命名空间按照typemap.dat文件定义生成,而不是随机的了,原来的n1或者其他也变成了Query。

然后使用soapcpp2 -C -L -x -I ~/gsoap-2.7/gsoap/import CallCrmWebservice.h 生成的soapStub.h等文件就会包含所有的wsdl函数了,命名空间的nsmap文件,就随便复制一个过来就可以,都是一样内容的。

读书人网 >C++

热点推荐