現在動作しているASP.NETサイトのIISでホストされているサービスを呼び出しています。テストアプリを使用すると、サービス参照を作成でき、すべてのパラメーターを入力するためのインテリセンスが得られます。サービスが呼び出されると、次のエラーが発生します。
コンテンツタイプtext/html; 応答メッセージのcharset=UTF-8が、バインディングのコンテンツタイプ(text / xml; charset = utf-8)と一致しません。
(このサイトの他の質問からの情報に基づいて)フィドラーを使用して、HTMLが返されることを確認し、標準サービスのWeb画面が返されることを確認しました。ここにいくつかのテキストがあります:
このサービスをテストするには、クライアントを作成し、それを使用してサービスを呼び出す必要があります。これは、次の構文でコマンドラインからsvcutil.exeツールを使用して実行できます。
実際のサービス応答が得られないのはなぜですか?
これがweb.configのその部分です:ところで、私のサイトはhttpsです。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService" 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://www.ed.net/Service.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService"
contract="EdQuotingService.IService" name="BasicHttpBinding_IService" />
</client>
</system.serviceModel>
編集:これを解決するために、Microsoftのサポートリクエストにお金を払うことになりました。その方法は次のとおりです。Global.asaxファイルをリクエストしたところ、次のようなリダイレクトコードが含まれていることがわかりました。
Protected Sub Application_BeginRequest(sender As Object, e As System.EventArgs)
If HttpContext.Current.Request.IsSecureConnection.Equals(False) And mid(Request.ServerVariables("HTTP_HOST"), 1, 9) <> "localhost" Then
Response.Redirect("https://" & Request.ServerVariables("HTTP_HOST") & HttpContext.Current.Request.RawUrl)
End If
取得したすべてのデータを再度分析したところ、サービス構成を読み取ろうとすると、構成ファイルを読み取れず、すべてのデフォルト構成が使用されていることがわかりました。これはトレースにはっきりと見られます。これは、サービスタグが見つからないため、すべてのデフォルト設定を使用しているためです。また、サービスが2つのエンドポイント(httpとhttps)でリッスンしていることもわかりました。したがって、wsdlファイルを参照すると、サービスは基本的にhttpsではなくhttpでリッスンするように構成されていることがわかります。したがって、メソッドStartQuoteがhttpでリッスンするように構成されていることがわかります。したがって、クライアントはこのインターフェースのhttpを呼び出し、global.asaxファイルはこれをキャッチしてhttpsにリダイレクトします。
収集したWCFトレースから、以下に示すように、構成評価コンテキストが見つからず、続いて一致するタグが見つからないというエラーが発生していることがわかりました。
エラー構成評価コンテキストが見つからないということは、構成ファイルから正しい構成を読み取ることができないことを意味します。また、System.ServiceModelタグの下にサービスタグが定義されていないため、デフォルトの構成、つまりSSLなしのbasichttpbindingを取得していました。したがって、クライアントがメソッド呼び出しを行おうとすると、httpsではなくhttpで呼び出しが行われ、global.asaxファイルによって取得されてhttpsにリダイレクトされます。
先に進み、System.ServiceModelタグの下にServiceタグを次のように追加しました。
<services>
<service name="EdisonQuotingService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="(binding name specified by you)_Transport"
contract="IService" />
</service>
</services>
<basicHttpBinding>
<binding name="(binding name specified by you)">
<security mode="Transport" />
</binding>
</basicHttpBinding>
上記の変更を行った後、WCFサービスからメソッドStartQuoteを呼び出そうとすると、問題なく正常に機能し、必要なデータを取得できました。