2010-08-10 176 views
5

我正在尝试在WCF RequestInterceptor中执行一些基本身份验证。我使用this article作为开始。WCF REST RequestInterceptor身份验证

我遇到的问题是拦截器和服务之间的通信。没有任何我已经尝试似乎工作。到目前为止,我曾尝试:

  • OperationContext.Current
  • requestContext.RequestMessage.Properties [HttpRequestMessageProperty.Name] [ “富”] =值
  • HttpContext.Current.Request

但无论我设置了什么,我都无法在服务行为本身中访问它:

[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; 
    } 
} 

我的曲线它们是:

  1. 如何在拦截器和服务之间传递数据?

  2. 它们之间是否存在传递身份验证信息的标准方式(请注意,身份验证信息是数据库中的UID,而不是Windows标识)?

感谢

回答

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; 
    } 
} 

我已经使用该示例,它的工作原理,仔细看看你的代码,你可能会错过一些东西。