0

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を使用して他のプロジェクトでこのサービスを使用したことがあるため、私の問題は私の側の構成の問題に関係していると確信しています。

4

3 に答える 3

2

もう一方のエンドポイントがどのように構成されているかを実際に理解する必要があります。セルフホストでSSLで実行されている場合は、トランスポートである必要がありますが、SSLを使用するIISで実行されている場合は、TransportWithMessageCredentialsであり、トランスポートクレデンシャルが「なし」である可能性があります。

これを正しくバインドするのは非常に難しいです。

あなたが得ている例外に関しては

提供されたURIスキーム'https'は無効です。予想される「http」。パラメータ名:

TransportCredentialOnlyを使用する場合は、HTTPSではなくHTTPバインディングを使用する必要があります。これは、サービス参照とは異なるため、エンドポイントアドレスをHTTPに変更しなかったと確信しています。

于 2009-12-16T06:08:11.740 に答える
1

イントラネット シナリオで使用しているバインドは何ですか? 推奨されるベスト プラクティスは、トランスポート セキュリティと Windows 資格情報を使用する NetTCP です (すべての発信者が企業の Active Directory にアカウントを持つイントラネット クライアントであると仮定します)。

これにより、http/https の混乱を回避できます。

ただし、netTcp をホストするには、IIS7 の一部であり、Windows Server 2008 (Vista Server) または 2008 R2 (Win7 Server) でのみ実行される WAS (Windows Process Activation Server) が必要です。または、NT サービスなどでサービスを自分でホストする必要があります。

まだまだ足りない情報がいっぱい!それに応じて質問を更新してください。ありがとう!

于 2009-12-16T06:25:21.643 に答える
0

以下のWCFバインディング構成が解決策になりました。

<security mode="Transport">
  <transport clientCredentialType="Basic" proxyCredentialType="None"
     realm="" />
  <message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
于 2009-12-22T00:36:08.823 に答える