场景:
有两线上网站A和调,其中A调用B提供的WebService服务.
因为某种原因,B不能继续提供服务.
要求:现要求用一服务来完全替代B提供的服务.
限制:A网站不能动,除了配置文件中的WebService地址可变化,其它不能有什么何变化.
可用资源:
1.一个A的本地源代码,已确定和线上A网站运行版本不一致,其中有一个调用B服务生成的本地代理和1个WSDL文件
2.一个线上的A网站COPY(发布版本,非源代码,可反编译,未混淆,可在本地WebServer运行)
已尝试:使用Wsdl.exe 对wsdl文件生成服务器端代码(接口),并实现.提供服务.
在使用Wsdl有一个error(具体请Wsdl.exe /si "path")
把本地A网站配置到新地址,debug可以发现,能够调入到新的服务并正确执行,也能返回结果,
但是在A接收到NULL.
在 代理类中方法中: object[] results = this.Invoke("method", new object[]{in0,in1});
results为Null,但是服务端已输出了结果(debug可知,或直接测试服务也可知)
已检查:服务器生成的接口和实现的XML特性的namespace和反编译(线上A)的代理的XML的namespace.
请大家畅所欲言,有能帮助者至少200分,QQ282092961
附:WSDL
------解决方案--------------------
不太明白这句话的意思:
在 代理类中方法中: object[] results = this.Invoke("method", new object[]{in0,in1});
results为Null,但是服务端已输出了结果(debug可知,或直接测试服务也可知)
用工具直接生成的代理类,注意nillable="true"表示该字段为可空类型
[XmlElement(IsNullable = true)]
------解决方案--------------------
另外可以尝试第三方的工具,比如SoapUI 4.0,代码类别选择C#
------解决方案--------------------
又看了一下你的帖子,那么目前可以确定的是,你的代理类是没有问题的
调到了服务,并且服务端返回了数据,并不代理服务端返回的数据(XML)结构是代理能够正确解析的
建议:将你生成的服务WSDL和你之前的WSDL用代码对比工具进行差异对比(肉眼估计会累死你)
------解决方案--------------------
并不代表服务端返回的数据(XML)结构是代理能够正确解析的
------解决方案--------------------
既然你可以反编译,那么拿出A的有关服务客户端代理里边的代码,是数据的class就用数据的class,是功能调用的class就把它有关
- C# code
:System.ServiceModel.ClientBase<W>,....
------解决方案--------------------
哦当然啦,在你的新的服务器程序上先引入这个WSDL文件生成所谓的客户端代理程序,然后按照上面说的去修改,相信用不了几十分钟就能整理出一个完整的服务端代码(当然不包括功能实现)。
------解决方案--------------------
例如说
- C# code
public class Weather { public RespInfo updateWeatherInfo(InfoHeader in0, WeatherInfoBean in1) { throw new NotImplementedException(); } public RespInfo2someListMap findWeatherInfoList(InfoHeader in0, NetWorkConditions in1) { throw new NotImplementedException(); } public RespInfo addWeatherInfo(InfoHeader in0, WeatherInfoBean in1) { throw new NotImplementedException(); } } public partial class WeatherInfoBean { public string agriTips{get;set;} public string cdbId{get;set;} public string cpId{get;set;} public string day{get;set;} public string forecastDate{get;set;} public string humidity{get;set;} public string pubDate{get;set;} public string recordStatus{get;set;} public string region{get;set;} public string source{get;set;} public string status{get;set;} public string temperature{get;set;} public string weather{get;set;} public string windDirection{get;set;} public string windSpeed{get;set;} }
------解决方案--------------------
学习
学习
------解决方案--------------------
ding.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~接分!