请教用Java调用.Net WebService
我使用.Net写了一个向数据库插入记录的Web服务,成功发布,在浏览器中测试:http://localhost/AddCustomerService/AddCustome...
我使用.Net写了一个向数据库插入记录的Web服务,成功发布,在浏览器中测试:http://localhost/AddCustomerService/AddCustomerService.asmx成功。
使用XFire方式调用这个Web服务,但出现了异常:SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值。
如果使用XFire必需创建元数据,就必需知道服务方法的接口,但是通常情况下,服务是由别人建好的,我能知道这个接口的原形是什么吗?
再有就是这个异常了,我的代码如下:
String serivceURL="http://localhost/AddCustomerService/AddCustomerService.asmx";
Service serviceModel=new ObjectServiceFactory().create(CustomerService.class);
XFire xfire=XFireFactory.newInstance().getXFire();
XFireProxyFactory factory=new XFireProxyFactory(xfire);
CustomerService cs=(CustomerService)factory.create(serviceModel,serivceURL);
int row=cs.Add(request.getParameter("name"));
请大家帮我解决一下,谢谢了先
那这个异常又是怎样解决呢?网上找了相关信息,还是搞不明白,为什么老说:“SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值。 ” 展开
使用XFire方式调用这个Web服务,但出现了异常:SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值。
如果使用XFire必需创建元数据,就必需知道服务方法的接口,但是通常情况下,服务是由别人建好的,我能知道这个接口的原形是什么吗?
再有就是这个异常了,我的代码如下:
String serivceURL="http://localhost/AddCustomerService/AddCustomerService.asmx";
Service serviceModel=new ObjectServiceFactory().create(CustomerService.class);
XFire xfire=XFireFactory.newInstance().getXFire();
XFireProxyFactory factory=new XFireProxyFactory(xfire);
CustomerService cs=(CustomerService)factory.create(serviceModel,serivceURL);
int row=cs.Add(request.getParameter("name"));
请大家帮我解决一下,谢谢了先
那这个异常又是怎样解决呢?网上找了相关信息,还是搞不明白,为什么老说:“SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值。 ” 展开
1个回答
展开全部
通常是要用的服务端提供的wsdl来了解服务的接口形式和数据形式,在 XFire里应该是可以用获得来的wsdl建立client端的反向工程(eclipse和myEclipse都可以)。如果你根本不知道服务端提供什么样的服务你又如何去调用它呢?或者说你又为什么要调用它呢?所以你的服务端应该会有wsdl(服务表述文件)提供,试试在浏览器里浏览http://localhost/AddCustomerService/AddCustomerService.asmx?wsdl
应该可以看到wsdl,然后将它保存为扩展名为.wsdl的文件,如果你有开发工具,可以尝试由这个wsdl文件反向创建你的client端程序,(如果自己去解读wsdl就比较复杂了。。)。
呵呵,我也是前两天才听过公司的一个web service的traning,并不太熟,希望你能搞定,共同探讨
附加:说明你的soap请求发过去了,server也接到,但是你缺少了SOAPAction的属性值在HTTP包头里(header),相信你清楚HTTP header的概念,你要将SOAPAction设置到到HTTP header里,就像你建立一个http connection 时需要在header里设置Content-Type一样。
如果我没理解错,SOAPAction设置的是调用server的operation(),这个字段的设置规则也在wsdl里可以找到,你在wsdl里找一下<soap:operation soapAction=这个元素,如果找不到,尝试着在http header里将SOAPAction 设置为""(空),但一定要设置,如果你用的是XFire理论上是不用设置,可能是你的client端没有正确的按照wsdl建立反项工程的原因,不过XFire应该也可以手动设置: Client.setProperty("SOAPAction","");
或者你可以看看这个:http://jira.codehaus.org/browse/XFIRE-884
总之是你缺少了SOAPAction 在HTTP header里,至于怎么设置,就要看你具体的code形式了。。。
应该可以看到wsdl,然后将它保存为扩展名为.wsdl的文件,如果你有开发工具,可以尝试由这个wsdl文件反向创建你的client端程序,(如果自己去解读wsdl就比较复杂了。。)。
呵呵,我也是前两天才听过公司的一个web service的traning,并不太熟,希望你能搞定,共同探讨
附加:说明你的soap请求发过去了,server也接到,但是你缺少了SOAPAction的属性值在HTTP包头里(header),相信你清楚HTTP header的概念,你要将SOAPAction设置到到HTTP header里,就像你建立一个http connection 时需要在header里设置Content-Type一样。
如果我没理解错,SOAPAction设置的是调用server的operation(),这个字段的设置规则也在wsdl里可以找到,你在wsdl里找一下<soap:operation soapAction=这个元素,如果找不到,尝试着在http header里将SOAPAction 设置为""(空),但一定要设置,如果你用的是XFire理论上是不用设置,可能是你的client端没有正确的按照wsdl建立反项工程的原因,不过XFire应该也可以手动设置: Client.setProperty("SOAPAction","");
或者你可以看看这个:http://jira.codehaus.org/browse/XFIRE-884
总之是你缺少了SOAPAction 在HTTP header里,至于怎么设置,就要看你具体的code形式了。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询