背景
最近需要将一些外部的及其他接口的调用移到一个独立的项目中,然后供其他项目调用。之前的几个已经成功迁移,但是在迁移一个需要用户名密码认证的接口的时候却始终调用不成功。下面直接上代码。
示例代码
在中通过添加服务引用会自动在(或者)中生成类似以下绑定配置:
可以直接调用的无参构造函数(会从配置中读取相应的配置)来获取客户端实例,但是由于中已经不支持(或者),因此需要自己通过代码来创建和来获取客户端实例
讯享网
发现问题
在测试过程中始终抛异常。使用上面相同的代码在里测试却能正常获取响应,初步判断应该是中的问题。通过wireshark工具抓包比对,我发现了差别。


java基础包怎么调试
通过两个请求的比对发现,失败的请求头部信息中没有信息。接着我使用发送请求来模拟对接口的调用。
在设置和不设置的分别测试中发现设置了能够成功请求并获得响应,不设置的请求获得了一段格式的文本响应,其中有一段很说明问题。在这两个不同的请求抓包中也发现成功的请求头部中是包含信息的,另一个则没有。因此基本断定问题就出现在这里。
如何解决
问题找到了,是因为请求头部中缺少信息,但是如何解决我却始终没有找到好的办法,接口的调用不像使用发送请求可以对进行修改。直接使用发送请求来调用接口对的序列化和反序列化又很是麻烦,也不想使用这种过于牵强的做法。翻遍了也始终没有找到解决办法。
终于,在我不懈的努力中看到了曙光,在上翻的的时候找到一些相关东西,特别是这一条https://github.com/dotnet/wcf/issues/3008。其中提到版本高于或等于4.5.0的时候会抛异常,虽然他的使用跟我的不太一样,但是异常信息却相同。我当即将版本降到4.4.4再次测试,结果令人惊喜,请求成功了,通过抓包分析信息在请求头部中。这证实我之前的判断,就是因为没有信息导致请求失败。
结语
问题解决了,4.5.0及以上版本会存在此问题,降级到4.4.4方可解决,希望微软早日修复此问题,在NuGet包管理中看到有更新但又不能更新的包是一件很不爽的事情!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/3059.html