1. ホーム
  2. c#

[解決済み] WCFサービスクライアント。応答メッセージのコンテンツタイプ text/html; charset=utf-8 が、バインディングのコンテンツタイプと一致しません。

2023-08-24 22:04:02

質問

私はローカルの IIS サーバー上で WCF サービスが動作しています。私はそれを C# ウェブサイト プロジェクトへのサービス参照として追加し、それはうまく追加され、プロキシ クラスが自動的に生成されました。

しかし、サービス契約を呼び出そうとすると、次のエラーが表示されます。

説明 現在のWebリクエストの実行中に、処理されない例外が発生しました。 が発生しました。 エラーとその場所に関する詳細な情報については、スタックトレースを確認してください。 をご覧ください。 スタックトレースを見てください。

例外の詳細です。 System.ServiceModel.ProtocolException: 応答メッセージのコンテンツタイプ text/html; charset=utf-8 が応答メッセージのコンテンツタイプと一致しません. のコンテントタイプと一致しません. バインディングのコンテンツタイプ(application/soap+xml; charset=utf-8)と一致しません.カスタム エンコーダを使用している場合は IsContentTypeSupported メソッドが正しく実装されていることを確認してください。 メソッドが正しく実装されていることを確認してください。レスポンスの最初の1024 バイトのレスポンスがありました。' 関数 bredir(d,u,r,v,c){var w,h,wd,hd,bi;var b=false;var p=false;var s=[[300,250,false],[250,250,false],[240,400,false],[336,280,false],[180,150,false],[468,60,false],[234,60,false],[88,31,false],[120,90,false],[120,60,false],[120,240,false],[125,125, false],[728,90,false],[160,600,false],[120,600,false],[300,600,false],[300,125,false],[530,300,false],[190,200,false],[470,250,false],[720,300,true],[500,350,true],[550,480,true]]; if(typeof(window. innerHeight)=='数値'){h=window.innerHeight;w=window.innerWidth;}else if(typeof(document.body.offsetHeight)=='number'){h=document.body.offsetHeight;w=document.body.offsetWidth;}for(Var) i=0;i

WCF サービスと通信するコンソール アプリケーションもありますが、コンソール アプリケーションでは、このエラーが発生することなく、正常にメソッドを呼び出すことができます。

以下は、私の設定ファイルからの抜粋です。

WCFサービスのWeb.Configです。

<system.serviceModel>
   <services>
      <service name="ScraperService" behaviorConfiguration="ScraperServiceBehavior">
         <endpoint address=""
                   binding="wsHttpBinding" 
                   bindingConfiguration="WSHttpBinding_IScraperService"
                   contract="IScraperService" />
         <endpoint address="mex" 
                   binding="mexHttpBinding" 
                   contract="IMetadataExchange" />
         <host>
            <baseAddresses>
                <add baseAddress="http://example.com" />
            </baseAddresses>
         </host>
      </service>
   </services>
   <bindings>
       <wsHttpBinding>
           <binding name="WSHttpBinding_IScraperService"
                    bypassProxyOnLocal="false" transactionFlow="false"
                    hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="2000000" maxReceivedMessageSize="2000000"
                    messageEncoding="Text" textEncoding="utf-8"
                    useDefaultWebProxy="true" allowCookies="false">
               <readerQuotas 
                     maxDepth="2000000" maxStringContentLength="2000000" 
                     maxArrayLength="2000000" maxBytesPerRead="2000000"
                     maxNameTableCharCount="2000000" />
               <reliableSession 
                     enabled="false" ordered="true" inactivityTimeout="00:10:00" />
               <security mode="Message">
                   <message clientCredentialType="Windows"
                            negotiateServiceCredential="true"
                            algorithmSuite="Default"
                            establishSecurityContext="true" />
               </security>
            </binding>
          </wsHttpBinding>
      </bindings>
      <behaviors>
          <serviceBehaviors>
              <behavior name="ScraperServiceBehavior">
                  <serviceMetadata httpGetEnabled="true" />
                  <serviceDebug includeExceptionDetailInFaults="true" />
              </behavior>
          </serviceBehaviors>
     </behaviors>
</system.serviceModel>

ウェブサイトプロジェクトサービスクライアント Web.Config :

<system.serviceModel>
   <bindings>
      <wsHttpBinding>
          <binding name="WSHttpBinding_IScraperService" 
              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="Message">
                  <transport clientCredentialType="Windows" 
                       proxyCredentialType="None" realm="" />
                  <message clientCredentialType="Windows" 
                       negotiateServiceCredential="true"
                       algorithmSuite="Default" />
              </security>
          </binding>
       </wsHttpBinding>
    </bindings>
<client>
        <endpoint name="WSHttpBinding_IScraperService"
            address="http://example.com/ScraperService.svc"
            binding="wsHttpBinding" 
            bindingConfiguration="WSHttpBinding_IScraperService"
            contract="ScraperService.IScraperService" >
           <identity>
               <servicePrincipalName value="host/FreshNET-II" />
           </identity>
        </endpoint>
     </client>
</system.serviceModel>

これは、WCFを作成するための私の最初の試みであるので、すべてが非常に新しいです。どんな助けでも大いに感謝します。

どのように解決するのですか?

以下のサイトにアクセスしてみてください。 http://localhost/ScraperService.svc を、サービスをホストしているサーバーの Web ブラウザで、クライアントが通常実行するのと同じ Windows の資格情報を使用して参照してみてください。

私は、IIS が期待どおりに xml を返す代わりに、何らかの説明の html エラー メッセージを表示しているのだと想像します。

これは、インターネットフィルタリングを行う http プロキシサーバーがある場合にも発生する可能性があります。私の ContentKeeper の経験は、あらゆる http/https トラフィックを傍受し、"Unmanaged Content" としてブロックし、私たちが返すのは html エラーメッセージだけということです。これを避けるには、Internet Explorer にプロキシ サーバーの例外ルールを追加して、プロキシがサイトへのトラフィックを遮断しないようにすることができます。

コントロール パネル > インターネット オプション > 接続 > LAN 設定 > 詳細設定 > プロキシ設定