Веб-сервис, размещенный в SAP и используемый приложением .NET - PullRequest
3 голосов
/ 10 февраля 2010

Я пытаюсь настроить веб-службу SAP, которая будет использоваться приложением .NET. Думая, что это было просто, я настроил Службу в SAP для использования HTTP. Я щелкаю правой кнопкой мыши «Service References» в .NET Project Tree и выбираю «Add Service Reference ...», введите URL-адрес WSDL, локально размещенный на наших серверах, и нажмите Go, затем выберите конечную точку и нажмите OK .

Я открыл файл app.config и обнаружил, что он говорит <httpsTransport> вместо <httpTransport>, хотя я настроил его на использование HTTP.

<system.serviceModel>
      <bindings>
           <customBinding>
               <binding name="ZHR_RECRUITNEW1">
                    <!--WsdlImporter encountered unrecognized policy assertions in ServiceDescription 'urn:sap-com:document:sap:soap:functions:mc-style':-->
                    <!--    <wsdl:binding name='ZHR_RECRUITNEW'>    -->
                    <!--        <wsaw:UsingAddressing xmlns:wsaw="http://schemas.xmlsoap.org/ws/2004/08/addressing">..</wsaw:UsingAddressing>    -->
                    <!--        <saptrnbnd:OptimizedXMLTransfer xmlns:saptrnbnd="http://www.sap.com/webas/710/soap/features/transportbinding/">..</saptrnbnd:OptimizedXMLTransfer>    -->
                    <!--        <sapattahnd:Enabled xmlns:sapattahnd="http://www.sap.com/710/features/attachment/">..</sapattahnd:Enabled>    -->
                    <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
                        messageVersion="Soap11" writeEncoding="utf-8">
                        <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    </textMessageEncoding>
                    <httpsTransport manualAddressing="false" maxBufferPoolSize="524288"
                        maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous"
                        bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                        keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous"
                        realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                        useDefaultWebProxy="true" requireClientCertificate="false" />
                </binding>
            </customBinding>
        </bindings>
        <client>
            <endpoint address="http://<host>:8000/sap/bc/srt/rfc/sap/zhr_recruitnew/300/zhr_recruitnew/zhr_recruitnew"
                binding="customBinding" bindingConfiguration="ZHR_RECRUITNEW1"
                contract="ServiceReference2.ZHR_RECRUITNEW" name="ZHR_RECRUITNEW1" />
        </client>
    </system.serviceModel>

Итак, чтобы он работал «правильно», я должен переименовать этот тег xml из httpsTransport в httpTransport и удалить атрибут requireClientCertificate = "false"

Итак, я захожу в SAP, чтобы настроить службу для использования HTTPS, а затем возвращаюсь в проект .NET и повторно добавляю эту службу, чтобы получить это сообщение об ошибке:

Could not establish trust relationship for the SSL/TLS secure channel with authority '<host>:<portnumber>'.

Мне любопытно, связано ли это замечание «WsdlImporter с нераспознанными утверждениями политики» в файле конфигурации как-то с ошибочным чтением этой информации из SAP

1 Ответ

3 голосов
/ 04 марта 2010

Не удалось установить доверительные отношения для безопасного канала SSL / TLS с полномочиями ':'.

Вы получаете это, потому что сертификат поставщика услуг не находится в ваших доверенных корневых сертификатах локально.

Вы можете добавить это в свой код (прежде всего), чтобы игнорировать его:

System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);
...