統合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();
ありがとうございました。 IIS 5.1(XPを実行している)でASP.NETクライアントをローカルにホストしていましたが、IIS 6を実行しているサーバーに移動することにしました。知っていたはずです。それは大したことではないと思いますが、なぜそれがうまくいかなかったのかを知ることはうれしいです。 – Yaron
申し訳ありませんが、IIS 5の知識は私の短期記憶から数年前にフラッシュされました:) –