2

統合Windows認証が有効で匿名認証が無効になっているIISでホストされているWCFサービスがあります。ASP.NETからWCFにWindows IDを渡す

"HTTP要求は、クライアント認証スキーム 'Negotiate'で許可されていません。サーバーから受信した認証ヘッダーが「Negotiate、NTLM」でした。このサービスをASP.NETから呼び出そうとすると、次のメッセージが表示されます。 '。] "

アイデア?

これは私のサービスの構成です:

<system.serviceModel> 
<bindings> 
    <basicHttpBinding> 
    <binding name="CalculatorServiceBasicHttpBinding"> 
     <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Windows" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<services> 
    <service name="Service.CalculatorService" 
      behaviorConfiguration="CalculatorServiceBehavior"> 
    <endpoint name="BasicHttpEndpoint" 
       address="" 
       binding="basicHttpBinding" 
       bindingConfiguration="CalculatorServiceBasicHttpBinding" 
       contract="Framework.ICalculatorService"> 
    </endpoint> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="CalculatorServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
</system.serviceModel> 

これは私がサービスを呼んでいる方法です:

var basicHttpBinding = new BasicHttpBinding(); 
basicHttpBinding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly; 
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; 
var factory = new ChannelFactory<Framework.ICalculatorService>(basicHttpBinding, new EndpointAddress("http://localhost/CalculatorService/CalculatorService.svc")); 
factory.Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; 
var proxy = factory.CreateChannel(); 
var emailAddress = proxy.GetMyEmailAddress(); 
((ICommunicationObject)proxy).Close(); 
factory.Close(); 

答えて

1

あなたのWCFの設定はそれほど最も可能性の高いあなたはIISが設定されていない私の作品WCFサービス(およびおそらくあなたのASP.NETクライアント)に対して正しく。サービスをホストしているIISサイトがこのTechNet article for IIS 7.の説明どおりに構成されていることを確認してください。IIS 7はWindows認証を有効にしていません。 IIS 6を使用している場合は、Windows認証の設定方法を検索する必要があります。

IISがサービス用に正しく設定されたら、サービスを呼び出すASP.NETサイトを構成する必要があります。既定では、WebサイトのASP.NET AppPoolはローカルマシンアカウント(ApplicationPoolIdentityまたはおそらくNetworkService)を使用します。そのアカウントを適切なドメインアカウントに変更する必要があります。また、IISマネージャーで承認ルールを追加するか、サービス web.configファイルをTechNetの記事に記載されているように更新して、そのドメインアカウントがサービスにアクセスできるようにする必要があります。

+0

ありがとうございました。 IIS 5.1(XPを実行している)でASP.NETクライアントをローカルにホストしていましたが、IIS 6を実行しているサーバーに移動することにしました。知っていたはずです。それは大したことではないと思いますが、なぜそれがうまくいかなかったのかを知ることはうれしいです。 – Yaron

+0

申し訳ありませんが、IIS 5の知識は私の短期記憶から数年前にフラッシュされました:) –

関連する問題