由SAP托管并由.NET应用程序使用的Web服务

时间:2010-02-10 19:09:07

标签: web-services .net-3.5 sap

我正在尝试设置一个将由.NET应用程序使用的SAP Web服务。认为这很简单,我在SAP中设置了服务以使用HTTP。我右键单击.NET项目树中的“服务引用”,然后选择“添加服务引用...”,输入我们服务器上本地托管的WSDL URL,然后按“执行”,然后选择端点,然后按“确定”。

我打开了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 个答案:

答案 0 :(得分:3)

无法使用权​​限':'建立SSL / TLS安全通道的信任关系。

您得到此信息是因为服务提供商上的证书不在本地受信任的根证书中。

您可以将其添加到您的代码中(先于其他任何内容)以忽略它:

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