3

SecurityMode: Message直接チャネル インターフェイスを介して WSHttpBinding を使用して、WCF サービス用の最小限のクライアントを構築しようとしています。

私の現在のコードは非常に単純です:

EndpointIdentity i = EndpointIdentity.CreateX509CertificateIdentity(clientCertificate);
EndpointAddress a = new EndpointAddress(new Uri("http://myServerUrl"), i);
WSHttpBinding b= new WSHttpBinding(SecurityMode.Message);
ChannelFactory<IRequestChannel> channelFactory = new ChannelFactory<IRequestChannel>(b, a);
channelFactory.Open();
IRequestChannel channel = channelFactory.CreateChannel();
channel.Open();
Message response = channel.Request(requestMessage);

clientCertificate が正しく読み込まれます。ただし、その後、すべての関数を正しい方法で呼び出すかどうかはわかりません。

事実: コード スニペットの最後の行はMessageSecurityException、コンテンツとともに をスローします。

クライアントは、SspiNegotiation/Kerberos の目的で、ターゲット アドレス ' http://myServerUrl 'の ID に基づいてサービス プリンシパル名を特定できません。ターゲット アドレス ID は、UPN ID (acmedomain\alice など) または SPN ID (host/bobs-machine など) である必要があります。

この問題の原因は何ですか?

4

1 に答える 1

0

デフォルトの ClientCredentialType は Windows のようです。そのため、Sspi/Kerberos に関連するエラーが発生しています。資格情報の種類として「証明書」を指定し、クライアントの資格情報コンテナーに実際の証明書を設定する必要があります。詳細については、このリンクのクライアント セクションをご覧ください。

http://msdn.microsoft.com/en-us/library/ms733098.aspx

于 2012-02-05T18:37:04.693 に答える