我尝试配置客户端与用Java编写的SOAP服务进行通信,但到目前为止我失败了。虽然使用SoapUI连接该服务非常容易(我只需要将这两个证书放在适当的位置并且它只是有效),但它在C#中远非简单(直观)。 / p>
服务使用两种不同的证书 - 一种用于签名消息(二进制令牌),另一种用于TLS加密。我使用本教程实现了自己的类:
感谢我能够连接和发送请求,但这不是问题的结束。下一个错误是"传入的消息使用与用于加密正文的令牌不同的令牌进行签名。这不是预期的。"
根据我的研究,我应该擦除整个Security标头并配置我的客户端以允许不安全的响应。因此,我应该使用它实现我自己的MessageEncoder:
我只添加了一个应该删除安全标头的额外功能,就像@nuronce在这个帖子中所做的那样:
但这仍然不是问题的结束......现在它说:"传出消息的消息版本(Soap11(http://schemas.xmlsoap.org/soap/envelope/)AddressingNone({{3} }))与编码器(Soap12(http://schemas.microsoft.com/ws/2005/05/addressing/none)Addressing10(http://www.w3.org/2003/05/soap-envelope))不匹配。确保使用与消息相同的版本配置绑定。"
这很奇怪,因为在我的自定义编码器类中具有MessageVersion属性的每个地方,它都设置为MessageVersion.Soap11作为默认值,不应修改,因为我不会改变任何内容我的CustomTextMessageEncodingBindingSection。
对于每个解决方案,WCF都会给我带来另一个问题,我对此失去了耐心,因为这些解决方案并不容易找到并适应我的需求。我也很确定,即使我经历了当前的问题 - 我会找到另一个,也许更难,甚至无法解决。
是否有其他.NET库允许我默认使用两个不同的证书并保存我的代码,使其不断增长,难以理解?如果没有,我该如何处理WCF?