2016-03-23 3 views
2

.asmxウェブサービスを持つ第三者と通信する必要があります。このWebサービスはhttpsを使用しています。私は必要な証明書(.pfx)を持っています。C#で証明書を必要とするWebサービスを呼び出す方法は?

Visual Studioで最初にAdd Service Referenceを使用してこのサービスを追加しようとすると、エラーが発生しました。証明書をPersonalストアにインポートすることで、このエラーが発生しました。私がした後、私はService Referenceをもう一度追加しようとしました。これで、Webサービスのインスタンスを作成できます。ニース。

今はサービスを呼びたいと思います。私がそれをすると、私はこのエラーになります:

302 Notification: Digital Certificate Missing

私はどのように私のサービスに正しい証明書を使用するように指示できますか?要求ストリームを取得する前にこれを追加すること

答えて

2

次のように私はようやく私の問題を解決するために管理:あなたのための

var service = new Service1SoapClient(); 
service.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.TrustedPublisher, X509FindType.FindByIssuerName, "name_of_issuer"); 
((BasicHttpBinding)service.Endpoint.Binding).Security.Mode = BasicHttpSecurityMode.Transport; 
((BasicHttpBinding)service.Endpoint.Binding).Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate; 
1

試してみてください。

ServicePointManager.Expect100Continue = true; 
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 
request.ProtocolVersion = HttpVersion.Version10; 
request.ClientCertificates.Add(new X509Certificate2("YourPfxFile(full path).pfx", "password for your pfx file"); 

セキュリティ要件や環境に応じて、あなたは異なるSecurityProrocolType値を使用する必要があります。

+0

おかげで答えるが、私は私のサービスのプロパティ 'ClientCertificates'を持っていない:' VARサービス=新しいService1.Service1SoapClient() ; ' – Martijn

+0

SOAPサービスコールの場合、これは生成されたプロキシクラスReference.csの内部に追加する必要があります。その唯一の問題は、このクラスを変更すると、Web参照を更新すると生成されたプロキシが書き換えられ、手動による変更を再度適用する必要があることです。 – Kevin

+0

これは私にとっては新しいものです。私は 'Reference.cs'ファイルを見つけましたが、このファイルのどこでこのコードを使う必要がありますか?ファイルはかなり大きいです(コード370行) – Martijn

関連する問題