SOAP セキュリティ ネゴシエーションが失敗する原因?

Category: fx wcf_ja

Question

ike560 on Thu, 26 Jun 2014 16:25:06


お世話になります。
WCFでアプリ開発を行っていますが下記のようなエラーが発生します。
イロイロ調べていますが原因がわかりません。何がいけないのか教えてください。よろしくお願いします。

サービス呼出し失敗:ターゲット 'http://localhost:8000/Test_Server/Appl' のための 'http://localhost:8000/Test_Server/Appl'
との SOAP セキュリティ ネゴシエーションに失敗しました。詳細については、内部例外を参照してください。


動作環境は下記の通りです。
  Windows 7 Professional SP1
  .NET 4.5
  同一パソコン上でテスト(サーバー側は管理者権限のコマンドプロンプトで動作)

ソースコード(抜粋)を以下に示します。

=== サーバー側 =====

WSHttpBinding binding = new WSHttpBinding();
binding.Security.Mode = SecurityMode.Message;
binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;

Uri baseAddress = new Uri(@"http://localhost:8000/Test_Server/Appl");
ServiceHost serviceHost = new ServiceHost(typeof(CssDataService), baseAddress);
serviceHost.AddServiceEndpoint(typeof(ICssDataService), binding, "");

serviceHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "TestAppl");

Console.WriteLine("サービスを開始します...");
serviceHost.Open();
Console.WriteLine("[Enter]キーを押すとサービスを停止します。");
Console.ReadLine();
  :
  :

=== クライアント側 =====

EndpointAddress epAddr = new EndpointAddress("http://localhost:8000/Test_Server/Appl");
WSHttpBinding binding = new WSHttpBinding(SecurityMode.Message, true);
binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName;
CssDataServiceClient client client = new CssDataServiceClient(binding, epAddr);
client.ClientCredentials.UserName.UserName = userName;  ← 外部から設定済み
client.ClientCredentials.UserName.Password  = password;   ← 外部から設定済み
client.ClientCredentials.ServiceCertificate.Authentication.CertificateValidationMode =  System.ServiceModel.Security.X509CertificateValidationMode.PeerOrChainTrust;

Console.Write("Sever Connection Start... \n");
client.GetData();
  :
  :

以上




Replies

なちゃ on Fri, 27 Jun 2014 02:14:06


>との SOAP セキュリティ ネゴシエーションに失敗しました。詳細については、内部例外を参照してください。

これは見てみたんでしょうか?

ike560 on Fri, 27 Jun 2014 05:17:09


>との SOAP セキュリティ ネゴシエーションに失敗しました。詳細については、内部例外を参照してください。

これは見てみたんでしょうか?

この内部例外は、どこを(何を)参照すればよいのか を含めて分からないのです。

よろしくお願いします。

ike560 on Fri, 27 Jun 2014 15:08:28


自己レスです。
サーバー側の証明書が正しくなかったのが原因の様です。
証明書を作り直したら接続できました。