我正在尝试在WCF RequestInterceptor中进行一些基本身份验证。我使用this article作为开始。
我遇到的问题是拦截器和服务之间的通信。我没有尝试任何东西似乎工作。到目前为止,我已经尝试过:
但无论我设置什么,我似乎无法在服务行为本身中访问它:
[AspNetCompatibilityRequirements( RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed )]
[ServiceBehavior( InstanceContextMode = InstanceContextMode.Single )]
public class AdvertiserService : ApiServiceBase<AdvertiserDataAccessor>, IAdvertiserService
{
[WebGet( UriTemplate = "" )]
public List<Advertiser> GetAdvertisers()
{
var request = HttpContext.Current.Request;
var headers = HttpContext.Current.Request.Headers;
var p = HttpContext.Current.Request.Headers["Principal"];
OperationContext ctx = OperationContext.Current;
}
}
我的问题是:
如何在Interceptor和服务之间传递数据?
是否有一种标准方法可以在它们之间传递身份验证信息(注意,身份验证信息是数据库中的UID,而不是Windows身份)?
由于
答案 0 :(得分:2)
您是否正在使用拦截器创建SecureWebServiceHostFactory?
public class SecureWebServiceHostFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
WebServiceHost2 host = new WebServiceHost2(serviceType, true, baseAddresses);
host.Interceptors.Add(new AuthenticationInterceptor());
return host;
}
}
我已经使用了这个示例并且它有效,仔细查看您的代码,您可能会遗漏某些内容。