【问题标题】:WCF Error A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only using wsHttpBindingWCF 错误 SOAP 1.2 消息在仅使用 wsHttpBinding 发送到 SOAP 1.1 时无效
【发布时间】:2019-10-24 08:16:53
【问题描述】:

我正在尝试使用一项我无法控制的服务,并且只获得了要使用的 WSDL。该服务需要用于身份验证的证书。我的证书配置很好,当我尝试如下调用服务时出现错误:

响应消息的内容类型 text/xml;charset=UTF-8 与绑定的内容类型不匹配(application/soap+xml; 字符集=utf-8)。如果使用自定义编码器,请确保 IsContentTypeSupported 方法已正确实现。第一个 274 响应的字节为:'soap:VersionMismatchA SOAP 1.2 消息仅在发送到 SOAP 1.1 时无效 端点。'。

我已经尝试过不同的方法,比如使用 customBinding,但我遇到了更多新的错误,我觉得无论如何都没有。你能帮忙吗?

客户端配置:

<system.serviceModel>
    <client>
      <endpoint name="IDeliveryServiceImplPort" 
                address="WebServiceUrl" 
                binding="wsHttpBinding" 
                bindingConfiguration="wsHttpBinding"
                behaviorConfiguration="wsHttpCertificateBehavior"
                contract="IDeliveryService">
        <identity>
          <dns value="MyIdentity" />
        </identity>
      </endpoint>
    </client>

    <bindings>
      <wsHttpBinding>
        <binding name="wsHttpBinding" closeTimeout="00:01:00" openTimeout="00:01:00"
                 receiveTimeout="00:10:00" sendTimeout="00:01:00"
                 bypassProxyOnLocal="false" transactionFlow="false"
                 hostNameComparisonMode="StrongWildcard"
                 maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                 messageEncoding="Text" textEncoding="utf-8"
                 useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas
            maxDepth="32" maxStringContentLength="8192"
            maxArrayLength="16384" maxBytesPerRead="4096"
            maxNameTableCharCount="16384" />
          <reliableSession enabled="false" ordered="true" inactivityTimeout="00:10:00" />
          <security mode="Transport">
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
      <customBinding>
        <binding name="WsHttpSoap11"  closeTimeout="00:01:00" openTimeout="00:01:00"
                 receiveTimeout="00:10:00" sendTimeout="00:01:00">
          <textMessageEncoding messageVersion="Soap11WSAddressing10" />
          <security authenticationMode="MutualCertificate" />
          <httpsTransport requireClientCertificate="true" />
        </binding>
      </customBinding>
    </bindings>

    <behaviors>
      <endpointBehaviors>
        <behavior name="wsHttpCertificateBehavior">
          <clientCredentials>
            <clientCertificate x509FindType="FindBySubjectName" findValue="MyIdentity" storeLocation="LocalMachine" storeName="My" />
            <serviceCertificate>
              <defaultCertificate x509FindType="FindBySubjectName" findValue="MyIdentity" storeLocation="LocalMachine" storeName="My" />
              <authentication certificateValidationMode="PeerOrChainTrust" revocationMode="NoCheck" trustedStoreLocation="LocalMachine" />
            </serviceCertificate>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>

【问题讨论】:

    标签: wcf soap x509certificate wcf-binding wcf-security


    【解决方案1】:

    我已经设法通过调整和试验来解决这个问题。为了解决,我更改为 basicHttpsBinding 花了我一两天的时间来弄清楚默认传输 clientCredentialType 是 None 并且您需要配置自定义绑定,如下所示。我希望 WCF 能告诉你原因或给出错误的解决方案,因为这太痛苦了。从一个错误描述到下一个不间断。

    <bindings>
          <basicHttpsBinding>
            <binding name="SecureHubBinding">
              <security>
                <transport clientCredentialType="Certificate"  />
                <message clientCredentialType="Certificate" />
              </security>
            </binding>
          </basicHttpsBinding>
        </bindings>
    

    【讨论】:

      【解决方案2】:

      这些配置是通过添加服务引用自动生成的吗?我们可以使用服务的WSDL文件来生成服务端使用的绑定信息,并添加服务引用来生成客户端代理类。
      另外,如果具有传输安全模式的服务使用证书对客户端进行身份验证,请保证满足以下要求。

      1. 客户端和服务器端的信任关系 应成立。在本地 CA 中安装相互证书。
      2. 这两个证书应该由 WCF 应用程序访问。 请添加所有人帐户(或运行 WCF 的帐户 application) 到证书私钥的管理组。
      3. 两个证书都应具有预期的客户端身份验证 目的和服务器身份验证的预期目的。

      如果有什么我可以帮忙的,请随时告诉我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-26
        相关资源
        最近更新 更多