5

サーバーに展開し、IIS を介して構成した場合にのみ機能する wcf サービスがあります。IIS Express で実行したときに表示されるエラー メッセージは次のとおりです。

ホスト ('Ntlm, Anonymous') で構成された認証スキームは、バインディング 'BasicHttpBinding' ('Negotiate') で構成されたものを許可しません。SecurityMode が Transport または TransportCredentialOnly に設定されていることを確認してください。さらに、この問題は、IIS 管理ツール、ServiceHost.Authentication.AuthenticationSchemes プロパティ、アプリケーション構成ファイル内のエレメント、バインディングの ClientCredentialType プロパティの更新、または調整によって、このアプリケーションの認証スキームを変更することによって解決される場合があります。 HttpTransportBindingElement の AuthenticationScheme プロパティ。

私の web.config サービスのビンギングは次のようになります。

 <services>
      <service name="LMS.Services.Services.AppService" behaviorConfiguration="LargeDataRequestBehavior">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttp_LargeDataRequestBinding" contract="LMS.Services.Services.AppService" />
        <endpoint address="mex" binding="basicHttpBinding" bindingConfiguration="basicHttp_LargeDataRequestBinding" contract="IMetadataExchange" />
      </service> </services>

私のバインディングは次のようになります。

   <bindings>
      <basicHttpBinding>
        <binding name="basicHttp_LargeDataRequestBinding" receiveTimeout="01:00:00" sendTimeout="01:00:00" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />          
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" >              
            </transport>
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
      <basicHttpBinding>
    </bindings>

どんな助けでも大歓迎です。

4

2 に答える 2

7

この部分を変えてみてください。問題は、Credential Type Windows の列挙型が Negotiate というプロトコルにマップされることです。IIS から、あなたの Web サイトで Negotiate が有効になっていないことが通知されました。Basic (セキュリティなし) と Ntlm (別の形式の Windows セキュリティ) のみが許可されています。

<bindings>
  <basicHttpBinding>   
    <binding>      
      <security >
        <transport clientCredentialType="Ntlm" >              
        </transport>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

ここでの WTF は、"Negotiate" と "Windows" の間に不一致があることです。

于 2013-08-27T03:24:00.657 に答える