Я использую Visual Studio 2019, чтобы попытаться создать клиент. Net 4.5.2, который использует удаленную веб-службу, использующую SOAP через HTTPS. Для аутентификации сервис требует, чтобы клиентский сертификат был присоединен ко всем запросам. Клиент создает экземпляр класса System.ServiceModel.ClientBase. Кажется, независимо от того, как я генерирую клиентский класс, я не могу установить ClientCredentials, я думаю, потому что ClientCredentials доступны только для чтения.
Вот команды, которые я использовал для генерации клиентского класса:
svcutil.exe /t:metadata https://example.com?WSDL
svcutil.exe /language:cs /config:app.config /messagecontract *.xsd *.wsdl
Вот привязка, которую я использую в своем файле web.config:
<bindings>
<basicHttpBinding>
<binding name="TCSOnlineServicePortBinding">
<!-- I am not sure of the mode below, message also does not work -->
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Certificate" proxyCredentialType="None" />
<message clientCredentialType="Certificate" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://example.com"
binding="basicHttpBinding" bindingConfiguration="TCSOnlineServicePortBinding"
contract="TCSOnlineService" name="TCSOnlineServicePort" />
</client>
Вот код, который не работает:
var TCSSvcClient = new TCSOnlineServiceClient(tcs_endpoint, TCSEndpointAddr);
var aCert = new X509Certificate2();
... [omitting code to find cert in MY store]
// The line below leave the ClientCertificate.Certificate set to NULL????? Why??
TCSSvcClient.ClientCredentials.ClientCertificate.Certificate = aCert;
// This also does not work, certificate is left NULL
TCSSvcClient.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2();
Кто-нибудь может увидеть, что я делаю неправильно ? Заранее спасибо.