WebServicesClientProtocol提供了无效的安全令牌

时间:2018-10-04 04:45:10

标签: c# soap token usernametoken

我正在尝试使用由wsdl.exe工具创建的代理类使用Web服务SOAP。我的代理类继承自WebServicesClientProtocol。

public partial class ProxyClass : Microsoft.Web.Services3.WebServicesClientProtocol

我们一直在与许多提供商合作,并且当他们的服务是SOAP时,我们总是使用这种方式来使用他们的Web服务。但是现在我有了一个用户名和密码来调用它们提供的方法。

在SoapUI中,我可以配置身份验证,并且我的SOAP请求(POST)包含如下所示的Security标签:

<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的请求相同的信息。

当我调试应用程序时,service.Method中的Invoke调用将引发异常。

  

提供了无效的安全令牌(在处理用户名令牌时发生错误),位于System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage消息,WebResponse响应,Stream responseStream,布尔asyncCall)      zh-cn System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(字符串methodName,Object []参数)

我不知道我固定的令牌中是否缺少配置属性,或者我尝试的内容无法实现,这将导致开发其他解决方案的时间更长。

我希望你们中的一些人在这种问题上有经验并摆脱了这种情况,所以您可以帮助我。

先谢谢了。

0 个答案:

没有答案