.net 如何在WCF中设置安全令牌?

.net 如何在WCF中设置安全令牌?,.net,wcf,security,webservice-client,.net,Wcf,Security,Webservice Client,我正在将一个应用程序从.net 1.1升级到3.5。此应用程序连接到WCF服务。以前,web服务客户端配置为使用安全令牌,如下所示: RegistrationWSWse registrationService = new RegistrationWSWse(); Microsoft.Web.Services2.Security.Tokens.UsernameToken token = new Microsoft.Web.Services2.Security.Tokens.UsernameToke

我正在将一个应用程序从.net 1.1升级到3.5。此应用程序连接到WCF服务。以前,web服务客户端配置为使用安全令牌,如下所示:

RegistrationWSWse registrationService = new RegistrationWSWse();
Microsoft.Web.Services2.Security.Tokens.UsernameToken token = new Microsoft.Web.Services2.Security.Tokens.UsernameToken("some username", "some password", Microsoft.Web.Services2.Security.Tokens.PasswordOption.SendPlainText );
registrationService.RequestSoapContext.Security.MustUnderstand=false;
registrationService.RequestSoapContext.Security.Tokens.Add(token);
现在,我在VisualStudio中向web服务添加了一个新的服务引用,但是自动生成的代码没有提供任何设置安全头的方法,如上所述

这是否需要在配置文件中的system.serviceModel部分进行配置


更新

我没有看到username/password属性的原因是我使用的是服务接口,而不是实际的实现类

我可以通过将实例强制转换为类型来设置这些内容,如下所示:

((RegistrationWSClient)registrationWs).ChannelFactory.Credentials.UserName.UserName = userName;
((RegistrationWSClient)registrationWs).ChannelFactory.Credentials.UserName.Password = password;
您必须做的另一件重要事情是更新客户端app.config文件。如果不这样做,则不会在SOAP头中设置用户名/密码。例如:

<security mode="TransportWithMessageCredential" />


退房。也有一些关于您的问题的好信息。

感谢Kamyar的链接。问题是我正在与服务接口交互,而不是与代理类交互。我只需要做一个转换来设置用户名/密码-见上文。@Paul:很高兴你能用上它。我也学到了一些新东西。谢谢。Stackoverflow的答案应该包含一个解释,而不仅仅是参考其他网站。