日期:2014-05-17  浏览次数:20652 次

java调用c# webservice接口
如题 现在在做webservice方面的东西 使用的是axis 需要调用的对方C#的接口

我的代码如下


String url="http://p2p.ips.net.cn/CreditWS/Service.asmx";
Service service = new Service();
String  strSign = IpsCrypto.md5Sign(IPayConfig.ipay_mer_code+IPayConfig.cert_md5);
Call call ;
try {
call = (Call)service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName("GetBankList");
call.addParameter(new QName("argMerCode"), XMLType.XSD_STRING, ParameterMode.IN);// 给call对象设置方法的参数名、参数类型、参数模式
call.addParameter(new QName("argSign"), XMLType.XSD_STRING, ParameterMode.IN);// 给call对象设置方法的参数名、参数类型、参数模式
            call.setReturnType(XMLType.SOAP_STRING);// 设置调用方法的返回值类型 
call.setUseSOAPAction(true);
call.setSOAPActionURI("http://tempuri.org/GetBankList");
String obj =(String)call.invoke(new Object[]{IPayConfig.ipay_mer_code,strSign});
System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}


返回结果提示我传的参数为空 这是为嘛捏
axis webservice ?java c#

------解决方案--------------------
webservice是跨语言的,提示你参数为空,就看看哪个参数为空了,与C#无关的。

或者你把报错信息贴出来看看?
------解决方案--------------------
引用:
Quote: 引用:

webservice是跨语言的,提示你参数为空,就看看哪个参数为空了,与C#无关的。

或者你把报错信息贴出来看看?

返回的报文

<pMerCode></pMerCode><pErrCode>9999</pErrCode><pErrMsg>报文非空字段为空值</pErrMsg>

其中<pMerCode> 节点对应的是我传的参数IPayConfig.ipay_mer_code 是一个常量

这是典型的入参必选项为空的错误,服务提供者应该给你提供了一份接口说明文档,你看看这个接口有哪些必选项,是不是没传给他?

WS接口调用的问题,一般解决思路有两个:要么对业务逻辑熟悉,可以参考接口说明文档以及服务器日志自己定位解决,要么就把日志发给服务端开发人员,让他们帮忙定位。
------解决方案--------------------
对方的WebService服务是有NameSpace的,你的Qname我没看见NameSpace