当前位置: 代码迷 >> Web Service >> 对WebService和WSDL比较了解的进来帮助一下解决办法
  详细解决方案

对WebService和WSDL比较了解的进来帮助一下解决办法

热度:506   发布时间:2016-05-02 03:11:13.0
对WebService和WSDL比较了解的进来帮助一下
场景:
有两线上网站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.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~接分!
  相关解决方案