Я пытаюсь подключиться к мыльному веб-сервису через https, используя soap11 и учетные данные сертификата клиента, используя c # .NET 4.5.Я использую инструмент vs, чтобы добавить ссылку на сервис, и он создает мыльный клиент для меня.
Я создал customBinding для выполнения https через soap11:
App.config
<system.serviceModel>
<bindings>
<customBinding>
<binding name="*****" closeTimeout="00:02:00" openTimeout="00:02:00" receiveTimeout="00:05:00" sendTimeout="00:05:00">
<textMessageEncoding messageVersion="Soap11"/>
<httpsTransport useDefaultWebProxy="false" requireClientCertificate="true" allowCookies="false" />
</binding>
</customBinding>
</bindings>
<client>
<endpoint address="******************"
behaviorConfiguration="******************"
binding="customBinding" bindingConfiguration="******************"
contract="******************"
name="******************" />
</client>
<behaviors>
<endpointBehaviors>
<behavior name="******************">
<clientCredentials>
<clientCertificate findValue="******************" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
c # код:
var client = new IConsultService.ConsultServiceClient();
client.consult("1");
client.consult("1"); <!-- fail error 404 - there was not endpoint listening at
Если я отправляю сообщение без сертификата, получаю tomcat 404, если я отправляю сертификат клиента, он работает нормально с первого раза, и мне кажется, что ябыть перенаправленным.Проблема заключается в том, что по второму запросу сбой (404), также, если я создаю экземпляр клиента снова не удается.Работайте только тогда, когда остановите приложение и запустите его снова.Кажется, что-то кешируется в статическом стеке программы.
И поскольку 404, я предполагаю, что это что-то из сертификата клиента, если я запрашиваю без сертификата, ошибка та же,
Я попытался создать привязки программно, установив ClientBase.CacheSetting = CacheSetting.AlwaysOff без удачи.
Edit1: Использование System.Net.HttpWebRequest происходит так же, первый запрос в порядке, второй запрос 404.
Edit2: Похоже, что на рукопожатии что-то есть, первый запрос отправить «Сертификат, Обмен ключами клиента», а второй запрос «Изменить обмен ключами шифра»
, есть ли способ принудительно закрытьканал и всегда отправлять "сертификат, клиентский ключ обмена"?
Спасибо