我在.net类中使用外部安全服务,通过对其进行Web引用并将其传递给用户名令牌,如下所示:
MyWebService objWS = new MyWebService();
UsernameToken token = new UsernameToken("User","Password", PasswordOption.SendPlainText);
objWS.RequestSoapContext.Security.Timestamp.TtlInSeconds = 60;
objWS.RequestSoapContext.Security.Tokens.Add(token);
objWS.RequestSoapContext.Security.MustUnderstand = false;
当我对同一服务URL进行服务引用并尝试使用ClientCredentials传递用户名和密码时,它会失败。
我不知道外部服务。知道什么可能是错的吗?
感谢您的时间......
答案 0 :(得分:0)
您是通过https呼叫服务吗?服务器可能需要客户端证书。 我发现了这个例子的用法。 UsernameToken
答案 1 :(得分:0)
解决方案是安装WSE3并在代理生成的继承自Microsoft.Web.Services3.WebServicesClientProtocol而不是默认的System.Web.Services.Protocols.SoapHttpClientProtocol。
然后服务代理对象将获得安全属性。
objWS.RequestSoapContext.Security
然后我可以使用它来传递UsernameToken。
这是一个黑客,我还没有找到更好的方法来做到这一点。重新生成代理将始终涉及必须再次手动编辑代理的额外步骤,如上所述。