私は、データベースにアクセスするためのドメイン特権を持つ特別なユーザーアカウントを使用してアプリケーションプールを使用して実行されるServerAでホストされたWebサイトを持っています。ウェブサイトの設定ファイルでは、私は指定:WCFと合格ウィンドウの資格情報
<identity impersonate="true" />
私はその後、サーバーAにもあり、以下のように(すなわち、何の設定ファイル)をプログラムコンソールアプリケーションでホストされていないサービスを提供しています。私は私のローカルマシン上でブラウザを開き、ウェブサイトは、WCFのサーバーに接続しようとすると、エラーが返され、ウェブサイトに行くとき
Uri uri = new Uri("net.tcp://ServerA:9900/Service/");
ServiceHost host = new ServiceHost(typeof(Service1), uri);
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Message;
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
ServiceEndpoint serviceEndpoint = host.AddServiceEndpoint(typeof(IService1), binding, uri);
EndpointAddress myEndpointAddress = new EndpointAddress(uri, EndpointIdentity.CreateSpnIdentity("MyspnName"));
serviceEndpoint.Address = myEndpointAddress;
host.Open();
「認証に失敗したため、セキュリティトークンの要求を満足することができませんでした。」
ウェブサイトがサービスに接続するために、次のコードを使用しています:PRINTMESSAGE、私は呼んでいる方法については
Uri uri = new Uri("net.tcp://ServerA:9900/Service/");
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.Message;
binding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
EndpointIdentity epid = EndpointIdentity.CreateSpnIdentity("MyspnName");
EndpointAddress endPoint = new EndpointAddress(uri, epid);
//EndpointAddress endPoint = new EndpointAddress(uri);
ChannelFactory<IService1> channel = new ChannelFactory<IService1>(binding, endPoint);
channel.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation;
IService1 service = channel.CreateChannel();
service.PrintMessage("Print this message!");
は、私が[OperationBehavior(Impersonation = ImpersonationOption.Required)]
を試してみました.. .Allowed ..しかし、エラーは同じです。
LocalHostを使用してウェブサイトをローカルで実行すると、エラーはなく完全に機能します。また、自分のweb.configでidentity impersonate = "false"を変更すると、それが実行されますが、Windowsの資格情報がWCFサービスに渡されず、それがポイントになります。
アイデアは何ですか? Plsの一般的なリンクは、私はおそらくすでにそれを読んだ!
おかげでたくさん
あなたの質問の一部として実際の設定ファイルのマークアップを投稿すると、本当に役に立つでしょう。解決策は、参照を追加するのを忘れることなどの単純なことかもしれません。 –