.Net编写的webService无法被JavaWeb调起问题总结

【前言】

目前在开发一个新项目,需要用开发语言编写一个webService,由于人员配置的关系,暂时只能用.Net编写了。可是JavaWeb端怎么也调不进webService中的函数。虽然后期问题得以解决,但引出一些列问题,我将所有问题及解决方法再此文章中记录,供给有需要的朋友们。

【正文】

由于项目要求,所以编写了一个webService,开发语言使用的C#。即使我们都是按照对接文档进行编写的,可是项目中的接口函数始终无法被调取,为了区分其他问题先将此标记为问题1。

上网查了很多资料,有一篇找不到原著的网文给了我思路《Java调用C#版WebService接口的例子》。看到文章中的例子,发现我没有在接口函数前使用SoapRpcMethod对函数进行属性定义。仿照例子中的方式添加上了,问题1得以解决。添加代码格式如下:

[SoapRpcMethod(Action = "http://MyService.com/setPara",    RequestNamespace = "http://MyService.com", ResponseNamespace = "http://MyService.com", Use = SoapBindingUse.Encoded)]

问题1解决之后,随之引出新问题2“服务器未能识别 HTTP 头 SOAPAction 的值”。在网上找到一个比较好的文章《C#WebService异常:服务器未能识别 HTTP 头 SOAPAction 的值》这里面详细描述了为什么会出现这个坑。根据他描述的解决方法,我在类前面添加了如下代码,问题2得以解决。

[SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)]

问题2解决之后,webService中函数可以被调起了,但在调试时发现问题3“参数值都是null”。网上对此问题解决方法不一致,有的说是因为调试状态;有的说是Java那边缺少jar包;有的说是因为Java那边使用Tomcat版本和IDE版本不兼容引起的;还有的说是因为值传递和引用传递使用混乱造成的。但我根据个人经验,怀疑这些都不是造成问题的因素。重新回顾了一下问题1中的例子文章,发现java那边有这样一句代码“call.addParameter( "b" ,XMLType.XSD_INT, ParameterMode.IN);”。它通过“addParameter”函数向被调函数中传值,并且指明参数名为 "b" 。我的天啊!看来webService中函数参数名称都不能随便写,还得跟JAVA那边对应上才行。

好了,重新修改一下,运行调试,一切OK!

 

猜你喜欢

转载自blog.csdn.net/th_gsb/article/details/88735310