【发布时间】:2011-08-12 13:50:39
【问题描述】:
大家好,Stackoverflow 用户,
我目前正在深入研究 WCF,并且我目前设置了一个使用 clientCredentialType="UserName" 的 POC Web 服务。由于我们有一些独特的愿望,我们选择了自定义会员提供者。我目前正在一件一件地实施。这意味着大多数方法(尚未使用)会抛出未实现的异常。
实现的方法是 Initialize() 和 ValidateUser() 方法,验证用户工作,当给定正确的凭据时,一个人被验证,当我输入伪造时,他们得到一个安全异常。
到目前为止一切顺利。
当我调用 GetUser() 方法(从某处获取用户名然后调用)时:
public override MembershipUser GetUser(string username, bool userIsOnline)
{
throw new NotImplementedException();
}
如您所见,这没有实现(很明显,它不起作用),目前让我感到沮丧的是我无法让它工作,因为从底层 GetUser() 传递的用户名方法(来自基类 MembershipProvider)传递一个空字符串。
有什么我忘记的具体内容吗?是否有其他人使用过解决此问题的自定义会员服务提供商的经验?
编辑:添加调用堆栈
在 System.Web.Security.Membership.GetUser(字符串用户名,布尔值 userIsOnline) 在 System.Web.Security.Membership.GetUser() 在 D:\Projects\IBS 中的 DirectPay.WCF.Services.Service.TestConnection() projects\DirectPay\source\WCF.Services\Service.svc.cs:第 21 行 SyncInvokeTestConnection(Object , Object[] , Object[] ) 在 System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(对象 实例,Object[] 输入,Object[]& 输出)在 System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
【问题讨论】:
-
如何调用
GetUser方法?您可以发布导致调用此方法的调用堆栈吗? -
这里是调用栈(我希望这就是你的意思,我不是调试明星:x)
-
不,我没有,因为这不是抽象方法,它是在 MembershipProvider 中实际实现的方法。我希望实际从...上下文中获取用户名的逻辑?这有点卡住了,我觉得我需要在验证时在某处设置用户名......但我不知道在哪里设置它,所以 GetUser() 将能够获取它>.
-
好的,我找到了一种在我正在调用的 TestConnection 方法中获取名称的方法:ServiceSecurityContext.Current.PrimaryIdentity.Name 有效。现在我仍然不明白为什么 GetUser() 不这样做......所以我让它保持打开状态。理想情况下,我不希望我的方法打扰用户名和其他东西。
标签: c# .net wcf asp.net-membership