2010-11-01 52 views
2

我有一個WCF數據服務,我試圖在DataServiceContext客戶端上使用UpdateObject方法。當我調用SaveChanges方法,我碰到下面的錯誤頁面:WCF數據服務更新返回401-未經授權:由於無效憑據而導致訪問被拒絕

未經授權:訪問被拒絕由於憑據無效
您沒有權限使用的憑據查看該目錄或網頁,你提供。

有沒有人有任何想法,我怎麼能解決這個問題?我發現this,這在理論上可以解決問題,但設置此磁盤訪問對於生產服務來說不是一個現實的解決方案。請記住,在本地機器上運行此WCF數據服務時,它工作得很好。我的電話C#代碼如下:

 public override void SetPropertyValues(SettingsContext context, SettingsPropertyValueCollection collection) 
    { 
     var userName = (string) context[ "UserName" ]; 
     var isAuthenticated = (bool) context[ "IsAuthenticated" ]; 
     if (userName != null && userName.Length >= 1 && collection.Count >= 1) 
     { 
      var allNames = string.Empty; 
      var allValues = string.Empty; 
      byte[] buf = null; 
      PrepareDataForSaving(ref allNames, ref allValues, ref buf, true, collection, isAuthenticated); 
      if (allNames.Length != 0) 
      { 
       var client = GetDataContext(); 
       var profile = client.ProfileViews.Where(p => p.UserName == userName).FirstOrDefault(); 
       if (profile == null) 
       { 
        profile = new ProfileView() { UserName = userName }; 
        client.AddToProfileViews(profile); 
       } 
       profile.PropertyNames = allNames; 
       profile.PropertyValuesString = allValues; 
       profile.PropertyValuesBinary = buf; 
       profile.LastUpdateDate = DateTime.UtcNow; 


       client.UpdateObject(profile); 
       client.SaveChanges(); 
      } 
     } 
    } 

回答

3

我有一個類似的問題,使用WCF數據服務的Silverlight應用程序。用戶可以在應用程序中查看數據---來自數據庫的SELECTS正在運行---但它們收到相同的「401 - 未經授權:對無效憑證拒絕訪問」。您正在描述何時試圖將更改保存到數據庫(即在SaveChanges在代碼中執行時)。底層問題最終成爲IIS應用程序文件夾本身的權限問題。要解決這個問題,我們必須授予WCF服務使用的應用程序池對該文件夾的寫入權限。

  1. 進入IIS並右鍵單擊包含WCF服務的虛擬目錄,選擇管理程序 - >高級設置....記下應用程序池的名稱。

  2. 在同樣的右鍵菜單中,選擇編輯權限.....在安全選項卡上,檢查組和用戶名。

  3. 如果應用程序池的名稱丟失。使用名稱格式「IIS APPPOOL \ MyApplicationPoolName」添加它。看到這個有用的鏈接:http://www.bluevalleytech.com/techtalk/blog/assigning-ntfs-folder-permission-to-iis7-application-pools/

  4. 確保MyApplicationPoolName具有寫權限(我們實際上把它完全控制)

+0

只是一個注意事項 - 確保你點擊「位置」並檢查機器名稱。如果你沒有,它不會找到IIS APPPOOL \'AppPoolName'用戶。我花了一段時間弄清楚這一點:D。謝謝! – dferraro 2013-09-23 16:17:50

0

在我來說,我在使用Kerberos(useAppPoolCredentials =真)有Windows身份驗證與模擬WCF數據服務託管在IIS 7.5上。奇怪的是我可以成功選擇並插入數據,但是當我嘗試更新時,我得到了401.3訪問被拒絕的錯誤。解決的辦法是讓在web配置(myRole)中指定的AD組:

<authorization> 
    <allow roles="myRole"/> 
    <deny users="*" /> 
</authorization> 

讀取和寫入訪問的應用程序文件夾等丹薩賓說。錯誤消息爲:

錯誤消息401.3:您無權使用您提供的憑據查看此目錄或頁面(由於訪問控制列表而導致訪問被拒絕)。要求Web服務器的管理員給你提供訪問

相關問題