WCFサービスを呼び出しているASPXページから次のエラーが発生します。
HTTP要求は、クライアント認証スキーム「Ntlm」では許可されていません。サーバーから受信した認証ヘッダーは「NTLM」でした。
負荷分散されたWebサーバー環境にいて、クライアントASPXページが同じサーバー上のWCFサービス(負荷分散されたWebサーバー上でも)にアクセスしている場合にのみエラーが発生します。
例:
サーバーAのASPXページ->サーバーBのWCFサービス=問題なし。
サーバーBのASPXページ->サーバーCのWCFサービス=問題なし。
サーバーBのASPXページ->サーバーBのWCFサービス=上からのエラー。
サーバーはIIS7.5であり、WCFサービスは現在、ネットワークサービスアカウントとして実行されている匿名認証とWindows認証で構成されています。
これはループバック保護と関係がありますか?現在、アプリケーションとサービスが同じマシンでホストされている単一のサーバー環境でこれらの結果を複製することはできません。
ASPXページとサービスのバインディングは次のとおりです。
クライアント:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_Imyservice">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://loadbalancedserver/myservice/myservice.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Imyservice"
contract="myservice.Imyservice" name="BasicHttpBinding_Imyservice" />
</client>
</system.serviceModel>
WCFサービス:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpEndpointBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="myservice.Service.myservice">
<endpoint address="" bindingNamespace="http://services.company.net/myservice"
binding="basicHttpBinding" bindingConfiguration="BasicHttpEndpointBinding"
contract="myservice.Imyservice" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>