WCFでイントラネットWebサービスを利用しようとしています。VS2008のサービス参照の追加機能を使用してサービスへの参照を追加しました。そうすることで、提供したサービスにアクセスするためのネットワーククレデンシャルの入力を求められ、サービス参照が追加されました。
次に、サービスの呼び出しとともにクレデンシャルを渡さないため、失敗すると予想されるコードをいくつか作成しました。
FooServiceClient proxy = new FooServiceClient();
bool isValid = proxy.ValidateBar(baz);
このコードを使用すると、例外が発生
します。HTTP要求は、クライアント認証スキーム「ネゴシエート」で許可されていません。
サーバーから受信した認証ヘッダーは「Basicrealm="Kerberos"」でした。
これは、以下の2つのコード例のいずれかを使用したときに受け取るエラーと同じです。
FooServiceClient proxy = new FooServiceClient();
proxy.ClientCredentials.UserName.UserName = "USERNAME";
proxy.ClientCredentials.UserName.Password = "PASSWORD";
bool isValid = proxy.ValidateBar(baz);
また
FooServiceClient proxy = new FooServiceClient();
NetworkCredential creds = new NetworkCredential("USERNAME", "PASSWORD");
proxy.ClientCredentials.Windows.AllowedImpersonationLevel =
TokenImpersonationLevel.Identification;
proxy.ClientCredentials.Windows.AllowNtlm = false;
proxy.ClientCredentials.Windows.ClientCredential = creds;
bool isValid = proxy.ValidateBar(baz);
私の腸は、セキュリティモードが正しく構成されていないことを教えてくれます。サーバーマネージャーによると、私がバインドしようとしているエンドポイントは、SSLを介して基本Httpクレデンシャルを探しています。WCF-BasicHttpトランスポートプロパティについて読んだ後、私はこの構成を使用する必要があると信じるようになりました。
<security mode="Transport">
<transport clientCredentialType="Windows" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
残念ながら、私は同じエラーを受け取り続けました。
繰り返しになりますが、以前に古いAdd Web Referenceを使用して他のプロジェクトでこのサービスを使用したことがあるため、私の問題は私の側の構成の問題に関係していると確信しています。