2010-08-10 253 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; 
    } 
} 

我已經使用該示例,它的工作原理,仔細看看你的代碼,你可能會錯過一些東西。