最近在整个WebService,闹了好几天同时调用多个服务没整出来,求坛子里的同志救救~~~

ewrscsf 2013-06-25 11:39:47
先把情况说下,用的是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相关的文件又是可以调用。两个头文件合并成一个头文件是手动处理的,确保内容都合并了。
~~哪位童鞋知道是怎么回事吗?
...全文
429 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
聼sohunjug 2013-06-26
  • 打赏
  • 举报
回复
我们的使用都是在unix上 不过应该是比较通用的 代码里也有win的定义 生成应该都可以使用 我的QQ:52642241
ewrscsf 2013-06-26
  • 打赏
  • 举报
回复
引用 6 楼 sohunjug 的回复:
你的问题应该是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文件,就随便复制一个过来就可以,都是一样内容的。
我是在windows下生成客户端代码呢,我检查了下typemap.dat,没有发现我编译指令中的命名空间?有些还没有说清楚,不知阁下可否提供下你的QQ或者mail呢,鄙人请教下。
ewrscsf 2013-06-25
  • 打赏
  • 举报
回复
引用 3 楼 adlay 的回复:
创建 Project 的时候选 dll 啊, 工程文件不是它生成的撒.
大哥,你这个方法就是把每个服务都写成dll然后调用啊~~ 我不想在程序里还额外添加dll~~~
www_adintr_com 2013-06-25
  • 打赏
  • 举报
回复
创建 Project 的时候选 dll 啊, 工程文件不是它生成的撒.
ewrscsf 2013-06-25
  • 打赏
  • 举报
回复
引用 1 楼 adlay 的回复:
就保留两套服务器的代码, 把他们编译成两个 dll 来调用不行么? 非要合并?
都是gsoap生成的h和cpp文件,还有nsmap文件,如何编译成dll?
www_adintr_com 2013-06-25
  • 打赏
  • 举报
回复
就保留两套服务器的代码, 把他们编译成两个 dll 来调用不行么? 非要合并?
聼sohunjug 2013-06-25
  • 打赏
  • 举报
回复
你的问题应该是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文件,就随便复制一个过来就可以,都是一样内容的。
www_adintr_com 2013-06-25
  • 打赏
  • 举报
回复
那有只能仔细检查你的合并了. 如果把两个服务器的文件直接加进去一起编译会有许多函数重定义吧

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧