2010-09-23 68 views
1

有,我在我的.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

如果您发布代码或XML,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮(101 010),以便对其进行精确格式化和语法突出显示! – 2010-09-23 04:59:46

+0

当我使用firefox时,工具栏并不会加载。我不知道为什么 – user20358 2010-09-23 05:19:26

+0

这不是关于WCF的问题,而是关于WSE。 – 2010-09-23 07:21:08

回答

0

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

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

objWS.RequestSoapContext.Security 

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

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

0

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

+0

没有。它被称为纯朴的http。 – user20358 2010-09-23 05:21:43