我正在使用正在构建的 Java 客户端连接到 WCF Web 服务。其他人已经成功构建了 WCF 客户端以连接到此服务。可通过 HTTP 获得的 WSDL 提供了消息级安全性。通过 HTTPS 可用的 WSDL 使用 TLS 和消息级安全。我知道在消息级安全性之上使用 TLS 基本上是双重加密,但这是一个关键要求。
由于我可以正确连接到 HTTP 服务,我相信我已经解决了所有信任存储和 key 存储问题。
我正在使用 Metro 2.1.1 连接到该服务。我已经在 Eclipse 和 Netbeans 中构建了客户端。我从 HTTP 站点获取 WSDL,并使用 wsimport(带有 -extensions 标志)成功构建和执行客户端。
当我使用 HTTPS 站点获取 WSDL 时,我可以再次成功构建两个客户端。但是当我执行它们时 - 我收到以下错误:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: An error occurred when verifying security for the message.
at com.sun.xml.ws.fault.SOAP12Fault.getProtocolException(SOAP12Fault.java:225)
at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:122)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:140)
at $Proxy43.request(Unknown Source)
两个 WSDL(一个通过 HTTP 获取,另一个通过 HTTPS 获取)之间的唯一区别是 WSDL 中对 HTTPS://与 HTTP://的引用。
我无法轻松访问 WCF 服务日志 - 通常在我请求一组日志和可以查看它们之间有 3-6 小时的延迟。
我的问题是有没有人遇到过类似的情况 - 我在这里公然遗漏了什么吗?我可以查找 NetMon 或 Wireshark 跟踪中的内容以查看问题出在哪里?几天来我一直在为此苦苦挣扎 - 任何帮助将不胜感激。
最佳答案
如果您有权访问服务配置,请尝试在您使用的端点上禁用安全上下文:
<message establishSecurityContext="False" clientCredentialType="UserName"/>
您可以阅读有关安全上下文 token (SCT) 的更多信息:
关于java - 使用 Metro 连接到 WCF 服务的问题 - HTTP 有效,HTTPS 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9352062/