HTTPS WCF サービスを呼び出したい。このように呼び出している場合:
SmartPayments2SoapClient client = new SmartPayments2SoapClient();
正しく動作しています。
しかし、私のシナリオでは、デフォルトのバインディングを使用したくありません。プログラムで作成する必要がありますが、これでは、私のサービスは安全であり、HTTPS で実行されていることを意味します。
プログラムでバインディングを作成できるコードを提案してください。
カスタム バインディングを使用した App.config は次のとおりです。
<customBinding>
<binding name="SmartPayments2Soap12">
<textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16" messageVersion="Soap12" writeEncoding="utf-8">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
</textMessageEncoding>
<httpsTransport manualAddressing="false" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" allowCookies="false" authenticationScheme="Anonymous" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" keepAliveEnabled="true" maxBufferSize="65536" proxyAuthenticationScheme="Anonymous" realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" useDefaultWebProxy="true" requireClientCertificate="false" />
</binding>
</customBinding>
これをC#プログラムに変換したい。私はこれを試しました:
SecurityBindingElement securityElement = SecurityBindingElement.CreateSslNegotiationBindingElement(false);
HttpsTransportBindingElement httpsTransport = new HttpsTransportBindingElement();
httpsTransport.AllowCookies = false;
httpsTransport.BypassProxyOnLocal = false;
httpsTransport.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
httpsTransport.MaxBufferSize = 65536;
httpsTransport.MaxBufferPoolSize = 524288;
httpsTransport.MaxReceivedMessageSize = 65536;
httpsTransport.TransferMode = TransferMode.Buffered;
httpsTransport.UseDefaultWebProxy = true;
httpsTransport.AuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous;
httpsTransport.ManualAddressing = false;
httpsTransport.AllowCookies = false;
httpsTransport.BypassProxyOnLocal = false;
//httpsTransport.DecompressionEnabled = true;
httpsTransport.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
httpsTransport.KeepAliveEnabled = true;
httpsTransport.ProxyAuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous;
httpsTransport.Realm = "";
httpsTransport.TransferMode = TransferMode.Buffered;
httpsTransport.UnsafeConnectionNtlmAuthentication = false;
httpsTransport.UseDefaultWebProxy = true;
CustomBinding binding = new CustomBinding(securityElement, httpsTransport);
EndpointAddress remoteAddress = new EndpointAddress("https://example.com/Payments/Transact2.asmx");
SmartPayments2SoapClient client = new SmartPayments2SoapClient(binding, remoteAddress);