2

WCFサービス呼び出し用にエンドポイントが変更されたWCFチャネルファクトリがあります。私が望んでいるのは、通常は単純な別のコンテキストでサービス呼び出しを実行することです。しかし、それは私のために働いていません。エンドポイントの動作にクレデンシャルを正常に追加し、検査して確認できますが、「NewUser」クレデンシャルを使用して呼び出しが行われていません。

internal static void UpdateChannelClientBehavior(ChannelFactory factory)
{
   factory.Endpoint.Behaviors.Remove<ClientCredentials>();
   //MyCustomCredentials is a custom class class variable that inherits System.ServiceModel.Description.ClientCredentials
   MyCustomCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
   MyCustomCredentials.Windows.ClientCredential = new NetworkCredential("NewUser", "password", "MyDomain");
   factory.Endpoint.Behaviors.Add(MyCustomCredentials);
   return;
}

したがって、このコードの後、エンドポイントには実際に新しいWindowsクレデンシャルがありますが、サーバー側では、「NewUsers」クレデンシャルではなく、デフォルトのコンテキストで呼び出されています。これを機能させるために私は間違って何をしていますか?

ありがとう!

4

2 に答える 2

0

「Windows」ではなく「username」clientCredentialTypeを使用するようにサービスを変更します。次に、ユーザー名とパスワードのクレデンシャルを使用するようにクライアント側を変更します。特に指定しない限り、WCFはデフォルトでWindowsアカウントデータベースに対して資格情報をチェックします。

factory.Credentials.UserName.UserName = "NewUser";
factory.Credentials.UserName.Password = "password";

「Windows」クレデンシャルタイプを使用する場合、それを変更することはできません。常に実行中のユーザーのコンテキストにあります。

于 2012-11-02T20:21:33.353 に答える
0

実際、このコードは機能します。

internal static void UpdateChannelClientBehavior(ChannelFactory factory)
{
   factory.Endpoint.Behaviors.Remove<ClientCredentials>();
   //MyCustomCredentials is a custom class class variable that inherits System.ServiceModel.Description.ClientCredentials
   MyCustomCredentials.Windows.ClientCredential = new NetworkCredential("NewUser", "password", "MyDomain");
   factory.Endpoint.Behaviors.Add(MyCustomCredentials);
   return;
}

WCFクライアントプロキシのインスタンスを直接インスタンス化する場合、これを行う別の方法は次のとおりです。

MyWcfService.MyWcfServiceServiceClient client = new MyWcfService.MyWcfServiceServiceClient();
client.ClientCredentials.Windows.ClientCredential = new NetworkCredential("NewUser", "password", "MyDomain");

私はコードを変更する多くの試みを繰り返していましたが、このコードに影響を与えていた下流の何かを台無しにしました。実際、上記のコードを使用して呼び出しのコンテキストを変更し、WCF呼び出しを行う別のユーザーになりすますことができます。これは、WCFサービスへの呼び出しを一時的に昇格させる必要がある場合に非常に便利です。

于 2012-11-05T14:37:02.600 に答える