2013-04-09 86 views
0

我对Web服务很陌生,所以我正在与一些奇怪的行为作斗争。在通过VS2010导入WSDL xml文件后,我得到了这些无法识别的策略断言。 WSDL文件是由SAP团队创建的,所以我不确定他们到底做了什么。通过.Net使用SAP Web服务

当我忽略这些评论尝试使用web服务时,我得到这个期待: 提供的URI方案'https'是无效的;预计'http'。

我知道这个错误消息意味着我有一个不同的传输逻辑作为URI定义,但我不知道如果我应该做些什么或更新WSDL文件。

<system.serviceModel> 
<bindings> 
    <customBinding> 
     <binding name="binding"> 
      <!-- WsdlImporter encountered unrecognized policy assertions in ServiceDescription 'urn:sap-com:document:sap:soap:functions:mc-style': --> 
      <!-- <wsdl:binding name='binding'> --> 
      <!--  <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> --> 
      <mtomMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16" 
       messageVersion="Soap11WSAddressing10" maxBufferSize="65536" 
       writeEncoding="utf-8"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      </mtomMessageEncoding> 
      <httpsTransport manualAddressing="false" maxBufferPoolSize="524288" 
       maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous" 
       bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard" 
       keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous" 
       realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" 
       useDefaultWebProxy="true" requireClientCertificate="false" /> 
     </binding> 
     <binding name="binding_SOAP12"> 
      <!-- WsdlImporter encountered unrecognized policy assertions in ServiceDescription 'urn:sap-com:document:sap:soap:functions:mc-style': --> 
      <!-- <wsdl:binding name='binding_SOAP12'> --> 
      <!--  <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> --> 
      <mtomMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16" 
       messageVersion="Default" maxBufferSize="65536" writeEncoding="utf-8"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      </mtomMessageEncoding> 
      <httpsTransport manualAddressing="false" maxBufferPoolSize="524288" 
       maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous" 
       bypassProxyOnLocal="false" decompressionEnabled="true" hostNameComparisonMode="StrongWildcard" 
       keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous" 
       realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" 
       useDefaultWebProxy="true" requireClientCertificate="false" /> 
     </binding> 
    </customBinding> 
</bindings> 
<client> 
    <endpoint address="http://{HOSTNAME}/sap/bc/srt/rfc/sap/zicert_kunden_auslesen/010/005056a5007b1ee2a5da43a20303be2b/binding" 
     binding="customBinding" bindingConfiguration="binding" contract="ServiceReference.ZICERT_KUNDEN_AUSLESEN" 
     name="binding" /> 
    <endpoint address="http://{HOSTNAME}/sap/bc/srt/rfc/sap/zicert_kunden_auslesen/010/005056a5007b1ee2a5da43a20303be2b/binding" 
     binding="customBinding" bindingConfiguration="binding_SOAP12" 
     contract="ServiceReference.ZICERT_KUNDEN_AUSLESEN" name="binding_SOAP12" /> 
</client> 

+0

还是没有解决方案? – apacay 2014-07-03 21:19:19

+0

您是否找到了解决方案? – Carlos 2015-01-02 19:08:48

回答

1

您的端点有http方案,但结合只定义httpsTransport。您可以尝试将绑定更改为httpTransport,或者查看您的端点是否也可用于https协议。

+0

谢谢。我已将其更改为** httpTransport **并切换到** authenticationScheme =“Basic”**,但现在我得到:** {“服务器没有提供有意义的答复;这可能是由于合同不匹配,会话过早关闭或内部服务器错误。“} ** – Marcin 2013-04-09 07:44:43

0

请尝试使用TransportCredentialOnly作为安全模式,不需要使用HTTPS协议(而您需要提供用户名和密码)。

<bindings> 
    <basicHttpBinding> 
    <binding name="NewBinding"> 
     <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Basic" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

您可以在下面的.NET代码的用户名和密码:

sapService.ClientCredentials.UserName.UserName = "UserName"; 
sapService.ClientCredentials.UserName.Password = "Password";