WCF использует SOAP 1.2, хотя MessageVersion - это Soap11WSAddressing10 - PullRequest
0 голосов
/ 13 июня 2018

Моя проблема заключается в следующем.Я получил WSDL для реализации в моем приложении ASP.NET .NET 4.7.1, чтобы другая компания могла вызвать операцию из того WSDL, который мы внедряем.Для них требуется несколько специальных настроек службы WCF.

  • SOAP 1.1
  • WS-Security 1.0
  • WS-Addressing 1.0 (2005-08)
  • HTTPS (с сертификатами x509)
  • Они требуют, чтобы мы установили определенный сертификат и чтобы мы могли проверить его сертификат у себя, и в свою очередь они также будут проверять наш, поскольку у них есть наш открытый ключ.Я считаю, что я должен использовать Custom Binding -> Security -> MutualCertificate для этого.Я указал службу и сертификат клиента, который следует использовать.

(Обратите внимание, что реализация WSDL не требует WCF, они говорят, что потребители могут свободно внедрять ее на любом языке. Я решил использоватьWCF и у них есть немного документации об этом, поэтому я думаю, что это должно быть поддержано.)

Когда я импортирую их WSDL непосредственно в пользовательский интерфейс SOAP, он говорит, что использует SOAP 1.1.Пространство имен SOAP 1.1 видно в WSDL.

Когда я импортирую WSDL моей службы (который, в свою очередь, реализует интерфейс, сгенерированный их WSDL), он использует SOAP 1.2.Это несоответствие и очень раздражает.

Я нашел этот пост: https://stackoverflow.com/a/22255554/3013479, и я попытался удалить HttpSoap12 и добавить HttpSoap.Я установил MessageVersion на Soap11WSAddressing10, поэтому он должен использовать SOAP1.1 .. Но он не работает.

Когда я использую BasicHTTPBinding без какой-либо настройки для этой привязки, он использует SOAP 1.1

Это моя привязка:

<customBinding>
    <binding>
        <textMessageEncoding writeEncoding="utf-8" messageVersion="Soap11WSAddressing10" />
        <security
            authenticationMode="MutualCertificate"
            enableUnsecuredResponse="false"
            messageProtectionOrder="EncryptBeforeSign"
            includeTimestamp="true"
            defaultAlgorithmSuite="TripleDesRsa15"
            allowSerializedSigningTokenOnReply="false"
            messageSecurityVersion="WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10"/>
      <httpsTransport requireClientCertificate="true"/>
    </binding>
  </customBinding>

Я считаю, что мне нужна настраиваемая привязка, потому что в одном из своих документов они упоминают некоторые свойства из настраиваемой привязки.Я не уверен, хотя!Кроме того, эта привязка генерирует AssymetricBinding, и я полагаю, что никакая другая привязка по умолчанию не делает это.

У кого-нибудь есть какие-либо советы?Ребята, вам нужны знания WSDL?Теоретически я не могу / не могу настроить WSDL, потому что тогда, возможно, служба больше не сможет подключиться к нам.Если мне нужно настроить WSDL, пожалуйста, скажите мне, почему я могу сообщить об этом в компанию.

1 Ответ

0 голосов
/ 15 июня 2018

Я решил этот вопрос, проблема в том, что пользовательский кодировщик удален из вопроса, потому что я думал, что это не тот элемент, который вызывает эту проблему.Несмотря на то, что пользовательский кодировщик определяет Soap11WSAddressing10, он все еще использует 1.2.Если я использую обычный TextMessageEncoder, он работает (но этот не соответствует моим потребностям).IWsdlExporter следует использовать для отражения того, что SOAP 1.1 должен использоваться при генерации WSDL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...