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

==等待高手: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


 

------解决方案--------------------
C#这边,自定义类型是VS帮你自动包装的么?

跟进去调试下。
------解决方案--------------------
都说XML是国际标准文本交换语言,就现在java和C#生成的xml标准不一样,确实是这样.你是C#调用java服务遇到这个问题,而我们是java调用C#服务遇到这个问题,我会继续关注你的问题.

就是因为两边的xml格式不一,就出现了系列化和反系列化的问题.
------解决方案--------------------
暂且不讨论发生这个问题的原因是什么。很可能是你的java端的webservice的问题。没有生成C#端能够正常识别的xml。xml是通用的格式,如果对象不能识别,而可以识别string、int等。是否可以考虑不直接序列化对象,而是用json字符串(string)来交互数据呢?
------解决方案--------------------
应该可以啊。
------解决方案--------------------
如果确实是xml引起的,你可以不使用vs的xml读取类,自己通过最基本的xml读取方法解析xml文件好了。
------解决方案--------------------
引用:
如果确实是xml引起的,你可以不使用vs的xml读取类,自己通过最基本的xml读取方法解析xml文件好了。


楼上说的有道理
------解决方案--------------------
在方法头部加入如下标记

[SoapRpcMethod(Use = SoapBindingUse.Literal, Action = "http://tempuri.org/findUser", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/")]
        [WebMethod]
        /// <summary>
        /// 单个从帐号查询接口
  &nb