Проблема с подключением к службе WCF с использованием Metro - HTTP Works, HTTPS не - PullRequest
3 голосов
/ 19 февраля 2012

Я подключаюсь к веб-службе WCF с помощью создаваемого Java-клиента. Кто-то уже успешно построил клиенты WCF для подключения к этой службе. WSDL, доступный через HTTP, обеспечивает безопасность на уровне сообщений. WSDL, доступный через HTTPS, использует как TLS, так и безопасность на уровне сообщений. Я понимаю, что использование TLS поверх безопасности на уровне сообщений - это в основном двойное шифрование, но это ключевое требование.

Поскольку я могу правильно подключиться к службе HTTP, я считаю, что все проблемы с хранилищем доверенных сертификатов и хранилищем ключей решены.

Я подключаюсь к услуге, используя Metro 2.1.1. Я построил клиент в Eclipse и Netbeans. Я получаю WSDL с сайта HTTP и, используя wsimport (с флагом -extensions), успешно создаю и выполняю клиентов.

Когда я получаю WSDL с сайта HTTPS, я снова могу успешно построить обоих клиентов. Но когда я их выполняю - я получаю следующую ошибку:

    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, которую я могу найти, чтобы увидеть, что проблема? Я боролся с этим в течение нескольких дней - любая помощь была бы очень признательна.

1 Ответ

0 голосов
/ 19 февраля 2012

Если у вас есть доступ к конфигурации службы, попробуйте отключить контекст безопасности на конечной точке, которую вы используете:

<message establishSecurityContext="False" clientCredentialType="UserName"/>

Подробнее о маркере контекста безопасности (SCT) можно прочитать:

...