1

従来の ASP から C# dll を呼び出そうとしています - この dll は Web サービスを呼び出します。その ASP サイトを運営している誰かから、この dll を作成するように依頼されましたが、それを行うには多くの問題がありました。彼は、*.crt ファイルがあり、dll はそれを使用して SSL ベースの Web サービスを呼び出す必要があると言いました。

したがって、これは従来の ASP であるため、COM オブジェクトにし、次のようにコードを使用してサービスとエンドポイントを構成する必要がありました。

BasicHttpBinding binding = new BasicHttpBinding();
binding.Name = "Service1Binding";
binding.CloseTimeout = System.TimeSpan.Parse("00:01:00");

binding.OpenTimeout = System.TimeSpan.Parse("00:01:00");
binding.ReceiveTimeout = System.TimeSpan.Parse("00:10:00");
binding.SendTimeout = System.TimeSpan.Parse("00:01:00");

binding.AllowCookies = false;
binding.BypassProxyOnLocal = false;
binding.HostNameComparisonMode = System.ServiceModel.HostNameComparisonMode.StrongWildcard;

binding.MaxBufferSize = 65536;
binding.MaxBufferPoolSize = 524288;
binding.MaxReceivedMessageSize = 65536;

binding.MessageEncoding = System.ServiceModel.WSMessageEncoding.Text;
binding.TextEncoding = System.Text.Encoding.UTF8;
binding.TransferMode = System.ServiceModel.TransferMode.Buffered;

binding.UseDefaultWebProxy = true;
binding.ReaderQuotas.MaxDepth = 32;
binding.ReaderQuotas.MaxStringContentLength = 8192;

binding.ReaderQuotas.MaxArrayLength = 16384;
binding.ReaderQuotas.MaxBytesPerRead = 4096;
binding.ReaderQuotas.MaxNameTableCharCount = 16384;

binding.Security.Mode = System.ServiceModel.BasicHttpSecurityMode.None;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;

binding.Security.Transport.Realm = "";
binding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;
binding.Security.Message.AlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Default;

EndpointAddress endpoint =
    new EndpointAddress("https://webservice.XXXX.com/Service1.svc");

var cert = new X509Certificate2(certPath); //local path to *.crt file
Service1.ServiceClient client = new Service1.ServiceClient(binding, endpoint);
client.ClientCredentials.ClientCertificate.Certificate = cert;

var result = client.HelloWorld();

最初は Forbidden 例外が発生したので、 を に変更しSecurity.ModeましたBasicHttpSecurityMode.TransportWithMessageCredential。今、私はこのエラーが発生しています:

秘密鍵が X.509 証明書に存在しない

ストアで証明書を探していますか、それとも指定したパスを使用していますか? どうすればこれを機能させることができますか?

4

0 に答える 0