2012-07-17 68 views
0

(WCFDS = WCF數據服務5,通過實體框架的支持,使用的OData V3,JSON格式,通過IIS7擔任了和Windows身份驗證保護。)如何從JavaScript訪問服務引用?

的關鍵是從訪問中的經認證的方式WCFDS AJAX呼叫。

爲此,我有一個客戶端作爲ASP.Net Web應用程序,在Web.config中設置Windows身份驗證,並指向WCFDS的服務引用。

我想使用客戶端JavaScript來訪問服務引用。我怎樣才能做到這一點?

我想過創建一個aspx頁面,託管在客戶端,並直接從JavaScript代碼調用到此頁面,然後通過服務引用檢索數據 - 但我對如何展示完整功能(這裏有幾十個實體)。

任何人都可以提供建議嗎?

+0

試圖確保我理解你的問題。如果我錯了,請糾正我。您有一個包含使用EF提供程序的WCF數據服務的Web應用程序。 IIS強制執行Windows身份驗證。你想從某個網頁的某個地方通過JavaScript訪問該服務(推測是一個加入域的機器?)是否正確? – 2012-07-17 15:09:57

+0

嗨,這是正確的。我想我只需在Web.config中設置適當的Windows授權設置,並將IIS保留爲匿名(應用程序設置角色等) – Richard 2012-07-19 05:46:52

回答

0

web.config中的Windows授權設置與WCF數據服務並不直接相關,因此您可能不需要在其中設置任何內容。您需要在IIS中正確設置您的設置。

有許多關於使用WCF數據服務的Windows授權的優秀文章;簡而言之,您可以在選擇公開授權方面擁有廣泛的自由度(從將Feed中的單個實體過濾到投擲401/403)。

一對夫婦的好文章讀一遍:

你可能寫的是沿着線的東西,最簡單的代碼:

namespace Scratch.Web 
{ 
    [ServiceBehavior(IncludeExceptionDetailInFaults = true)] 
    public class ScratchService : DataService<ScratchContext> 
    { 
     [QueryInterceptor("Products")] 
     public Expression<Func<Product, bool>> ProductsAuthorization() 
     { 
      if (!HttpContext.Current.Request.IsAuthenticated) 
      { 
       return (p) => false; 
      } 
      return (p) => HttpContext.Current.User.IsInRole("AllowAccessToProducts"); 
     } 

     // ...rest of service code... 
    } 
} 

需要注意的是在客戶端上的一切是由瀏覽器來控制,所以你並不需要做任何事情有(最大的一步可能是將網站添加到受信任的站點,因此不提示如果你在加入域的計算機上,你可以獲得你的憑證)。