==等待高手:c#调用java 写的webservice问题==
调用的webservice是java开发的,在c#中的调用代码如下,webservice能正确执行,但是返回的参数(为自定义类型)一直为null,但是用java调用则能正确返回参数,测试其它还发现,如果返回类型string、int等不是自定义类型,C#都能正确返回,就是自定义类型的无法返回,一直为null,这几天在网上找了很多资料,总结了一下,都说有两种原因:
一:JAVA返回的XML不标准,C#这边反序列化的时候出问题
二:JAVA的SERVICE类跟返回的自定义对象的类放在两个不同的包,而C#这边生成的类两者是放在同一个命名空间的,所以C#这边会出问题。
对方是产品,不能随意修改了,不知道还有什么办法解决
WebReference.SyncNotifySPServiceImplService sss = new WebReference.SyncNotifySPServiceImplService();//接口函数
WebReference.SubInfo sbi = new WebReference.SubInfo();//提交参数
WebReference.ResponseMessage rsm = new WebReference.ResponseMessage();//返回参数
//-----------------提交的参数---------------------------
sbi.userId = "654377";
sbi.nsrsbh = "480101198510100991";
sbi.zh = "480101198510100991_0@dlgs";
sbi.fjxh = "0";
sbi.yhmc = "测试用户";
sbi.mm = "100991";
sbi.sfzh = "10000001";
sbi.sfje = "0.00";
sbi.khrq = "2013-10-30";
sbi.yxqz = "2013-10-30";
sbi.dlszh = "";
sbi.zt = "01";
sbi.updateTime = "2013-10-30";
sbi.sssf = "48";
sbi.gds_bz = "01";
sbi.kzcs = "";
//-----------------提交的参数---------------------------
rsm = sss.handleVpdn(sbi);//调用接口函数,返回自定义参数,一直为null
[SoapRpcMethod(Use = SoapBindingUse.Literal, Action = "http://tempuri.org/findUser", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/")]
[WebMethod]
/// <summary>
/// 单个从帐号查询接口
/// </summary>
/// <param name="userID">从帐号ID</param>
/// <returns>从帐号信息</returns>
public string findUser(string userID)
{
log.Fatal("系统开始访问--根据操作员账号查找账号信息");
log.Fatal("系统开始访问--根据操作员账号查找账号信息XML:" + userID);
var result = string.Empty;
result = bo.FindUser(userID);
return result;
}
不管是给java webservice传数据,还是从java取数据都要解析这个字段的。