如何在WCF代理服务(B)中获取并传递用户名密码至WCF服务(A)
WCF代理服务(B)获取客户端凭证并传递至服务(A)的实现方案
现有采用自定义用户验证的WCF服务(A),需开发作为客户端与服务(A)之间代理的WCF服务(B)。核心问题是:如何在服务(B)中获取当前客户端传入的ClientCredentials.UserName.UserName与ClientCredentials.UserName.Password,并将其传递至服务(A)?
服务(B)的初始示例代码如下:
public class WcfServiceB: IWcfServiceB { private WcfServiceA _serviceA; public WcfServiceB() { _serviceA = new WcfServiceA(); _serviceA.ClientCredentials.UserName.UserName = userName; //how to get current userName of WcfServiceB?? _serviceA.ClientCredentials.UserName.Password = password; //how to get current password of WcfServiceB?? } public string TestMethod() { return _serviceA.TestMethod(); } }
已实现的方案
通过自定义验证类暂存凭证,再在服务(B)中读取传递:
- 创建带静态字段的自定义用户验证类,在验证环节保存客户端传入的凭证:
public class CustomUserCredentials : UserNamePasswordValidator { public static string UserName; public static string Password; public override void Validate(string userName, string password) { UserName = userName; Password = password; } }
- 在服务(B)中通过该静态类获取凭证,设置到服务(A)的客户端凭证中:
public class WcfServiceB: IWcfServiceB { private WcfServiceA _serviceA; public WcfServiceB() { _serviceA = new WcfServiceA(); _serviceA.ClientCredentials.UserName.UserName = CustomUserCredentials.UserName; _serviceA.ClientCredentials.UserName.Password = CustomUserCredentials.Password; } public string TestMethod() { return _serviceA.TestMethod(); } }
注:该方案可实现需求,但并非最优解。
内容的提问来源于stack exchange,提问作者Jivopis
相关产品推荐
相关产品推荐

