2013-02-10 46 views
1

我在Umbraco中創建了自定義WCF服務。該服務駐留在Service文件夾中,似乎工作正常(我可以調用它並且適當地響應)。現在我希望用戶在撥打服務時進行身份驗證。在Umbraco中使用身份驗證的主機自定義WCF服務

要做到這一點,我已經添加了幾行代碼寫進web.config

<system.serviceModel> 
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" /> 
<bindings> 
    <webHttpBinding> 
    <binding name="RaceManBinding"> 
     <security mode="None" /> 
    </binding> 
    </webHttpBinding> 
</bindings> 
<services> 
    <service name="RaceManagerAdmin.RaceManDataService" behaviorConfiguration="RaceManBehavior"> 

    <endpoint address="" 
       binding="webHttpBinding" 
       contract="System.Data.Services.IRequestHandler" /> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="RaceManBehavior"> 
     <serviceCredentials> 
     <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" 
           membershipProviderName="UmbracoMembershipProvider" /> 
     </serviceCredentials> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
</system.serviceModel> 

當我的服務被稱爲它應該使用一把umbraco成員提供給用戶進行身份驗證。

我的客戶創建一個網絡憑證的對象,這樣的specificies這樣:

var a = new RaceEntities(new Uri("http://localhost:40406/umbraco/Webservices/RaceManDataService.svc")) { Credentials = new NetworkCredential("admin", "secret") }; 

當我檢查HTTPContext.Current我沒有看到任何身份驗證的用戶。

我在做什麼錯?

弗雷德裏克

回答

1

您需要啓用ASP.Net兼容性,以便通過的HttpContext訪問身份:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
</system.serviceModel> 

回答這個問題提到了另一種方法:How to access HttpContext.Current.User.Username in WCF service

+0

嗨 我很抱歉,但似乎我錯過了service.mode-tag的一些部分。我現在已經包括了這一切。 – Frederik 2013-02-10 15:33:22