3

バインディングでコンテンツタイプの不一致エラーが発生する理由を理解しようと数日間これに取り組んできました。この問題を抱えているように見える他の人は無数にいますが、すべての解決策が適用されないか、機能していません。

私はどこでも、次のエラーが発生する理由を理解しようとしています。

'/'アプリケーションのサーバーエラー。

コンテンツタイプapplication/soap + xml; 応答メッセージのcharset=utf-8が、バインディングのコンテンツタイプ(text / xml; charset = utf-8)と一致しません。カスタムエンコーダーを使用する場合は、IsContentTypeSupportedメソッドが正しく実装されていることを確認してください。応答の最初の823バイトは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><GetQuoteResponse xmlns="http://soap.service.GMO.com"><Quote_Response><errorMessage></errorMessage><return_List><item><errorMessage></errorMessage><monthlyPremiumAmount>6.0</monthlyPremiumAmount><webID>7P3W4Txst</webID><basePer1>1000.0</basePer1><basePer2>0.0</basePer2><baseRate1>0.05</baseRate1><baseRate2>0.0</baseRate2><benefitID>5365</benefitID><coverageAmount>100000</coverageAmount><grossPer1>1000.0</grossPer1><grossPer2>0.0</grossPer2><grossRate1>0.06</grossRate1><grossRate2>0.0</grossRate2></item></return_List></Quote_Response></GetQuoteResponse></soapenv:Body></soapenv:Envelope>

私が使用しているWebサービスはIISでホストされていません。SoapUIを使用し、すべての適切な結果が返されるため、Webサービス自体は適切に機能しているようです。上記のエラーメッセージからもわかるように、値はWebサービスから返されています。

また、Fiddlerを使用しており、リクエストヘッダーのコンテンツタイプがtext / xmlであり、レスポンスヘッダーのコンテンツタイプがapplication / soap+xmlであることを確認できます。

サービス参照が存在するデータレイヤーがあります。app.configは次のようになります。

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="IMSQuoteServiceBinding" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
                useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None"
                        realm="" />
                    <message clientCredentialType="UserName" algorithmSuite="Default"  />
                </security>

            </binding>

        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://hostingServerName:81/cgi-bin/jsmdirect?IMSQuote"
            binding="basicHttpBinding" bindingConfiguration="IMSQuoteServiceBinding"
            contract="Quote.IMSQuoteServicePortType" name="IMSQuoteServicePort" />
    </client>
</system.serviceModel>

Webサイトweb.configは次のようになります。

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="IMSQuoteServiceBinding" closeTimeout="00:01:00"
        openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
        allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
        maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
        messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
        useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
          maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="None">
        <transport clientCredentialType="None" proxyCredentialType="None"
            realm="" />
        <message clientCredentialType="UserName" algorithmSuite="Default" />
      </security>

    </binding>
  </basicHttpBinding>    

</bindings>
<client>
  <endpoint address="http://hostingServerName:81/cgi-bin/jsmdirect?IMSQuote"
      binding="basicHttpBinding" bindingConfiguration="IMSQuoteServiceBinding"
      contract="Quote.IMSQuoteServicePortType" name="IMSQuoteServicePort" />
</client>

どんな助けでも大歓迎です。私はWCFに少し慣れておらず、あらゆるアイデアを受け入れています。

よろしくお願いします。さらに情報を提供する必要がある場合は、お知らせください。

4

1 に答える 1

4

アップデートとして。

サービス バインディングを basicHttpBinding から wsHttpBinding に変更しました。バインディングを wsHttpBinding に変更すると、SOAP サービスが変更され、SOAP 1.1 呼び出しではなく SOAP 1.2 呼び出しとして送信されるようになりました。これを行うと、送信呼び出しと受信呼び出しでコンテンツ タイプが一致し、バインディングの不一致エラーが解決されました。

于 2012-12-18T17:00:43.000 に答える