使用服务引用调用安全服务

时间:2010-09-23 03:14:00

标签: .net wcf web-services

我在.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传递用户名和密码时,它会失败。

我不知道外部服务。知道什么可能是错的吗?

感谢您的时间......

2 个答案:

答案 0 :(得分:0)

您是通过https呼叫服务吗?服务器可能需要客户端证书。 我发现了这个例子的用法。 UsernameToken

答案 1 :(得分:0)

解决方案是安装WSE3并在代理生成的继承自Microsoft.Web.Services3.WebServicesClientProtocol而不是默认的System.Web.Services.Protocols.SoapHttpClientProtocol。

然后服务代理对象将获得安全属性。

objWS.RequestSoapContext.Security

然后我可以使用它来传递UsernameToken。

这是一个黑客,我还没有找到更好的方法来做到这一点。重新生成代理将始终涉及必须再次手动编辑代理的额外步骤,如上所述。