WebServicesClientProtocol Предоставлен неверный токен безопасности
Я пытаюсь использовать SOAP веб-службы с прокси-классом, созданным инструментом wsdl.exe. Мой прокси-класс наследуется от WebServicesClientProtocol.
public partial class ProxyClass : Microsoft.Web.Services3.WebServicesClientProtocol
Мы работали со многими провайдерами, и мы всегда использовали этот способ для использования их веб-сервисов, когда у них SOAP. Но теперь мне дали имя пользователя и пароль для вызова методов, которые они предоставляют.
Из SoapUI я мог настроить аутентификацию, и мой SOAP-запрос (POST) включает тег безопасности, который выглядит следующим образом:
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-F553155D3B9F83F7E515385814519794">
<wsse:Username>user</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">password</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">yCDGvunHkyT0Hk2pCXXiSA==</wsse:Nonce>
<wsu:Created>2018-10-03T15:44:11.979Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
Ответ был, как я и ожидал. Но проблема в том, когда я пытаюсь сделать то же самое в моем клиентском приложении. Когда мне нужно вызвать метод, я создаю экземпляр объекта моего прокси-класса и использую следующие строки:
ProxyClass service = new ProxyClass (this.urlWebService);
UsernameToken token = new UsernameToken(USERNAME, PASSWORD, PasswordOption.SendPlainText);
service.RequestSoapContext.Security.Tokens.Add(token);
...
service.Method(...);
Где USERNAME и PASSWORD - это константы, содержащие ту же информацию, которую я использовал для моего запроса от SoapUI.
Когда я отлаживаю приложение, возникает исключение при вызове Invoke в сервисе. Метод:
Был предоставлен недопустимый токен безопасности (произошла ошибка при обработке токена имени пользователя) en System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse (сообщение SoapClientMessage, ответ WebResponse, поток StreamStream, логический asyncCall) en System.Web.Services.ProttLSS..Invoke(String methodName, Object[] параметры)
Я не знаю, отсутствует ли атрибут конфигурации в токене, который я исправил, или то, что я пытаюсь сделать, просто невозможно, что приведет к увеличению времени на разработку других решений.
Надеюсь, некоторые из вас имели опыт решения такой проблемы и избавились от этого, чтобы вы могли мне помочь.
Заранее спасибо.