2014-02-17 63 views
0

我被要求對現有的MVC網站進行更改,但不幸的是,該網站的原始開發人員不在公司,沒有任何文檔,也沒有人真正瞭解它不是目前運行在我們的測試&現場環境。 呻吟無法在本地運行MVC Web應用程序

反正當我設置項目爲抓手項目並運行它,我得到以下可愛的白色錯誤頁:

Access is denied.

Description: An error occurred while accessing the resources required to serve this request. The server may not be configured for access to the requested URL.

Error message 401.2.: Unauthorized: Logon failed due to server configuration. Verify that you have permission to view this directory or page based on the credentials you supplied and the authentication methods enabled on the Web server. Contact the Web server's administrator for additional assistance.

不是大量的錢讓我繼續(至少對我來說)。 所以我在web.config文件檢查和authorization設置爲:

<authorization> 
    <deny users=」?」 /> 
</authorization> 

如果我改變了對下面的代碼我得到一個頁面,指出它無法加載,但它是一個一步因爲我至少可以進入一些代碼。

<authorization> 
     <allow users="*"/> 
    </authorization> 

代碼沒有做對Active Directory一些驗證,其工作方式,我可以通過設置一個破發點,並移動過去的功能避開那個討厭的安全代碼。如果用戶有效(我將斷點移至此處),則代碼本身不執行任何操作,但返回true,如果它們無效,則返回false。這是我能夠在控制器中捕捉斷點以查看是否發生任何事情的唯一方式,但沒有任何內容突出。 該代碼儘可能部分地在類中,它將使用LINQ來獲取正確的信息。

public ReadOnlyCollection<Application> GetApplicationStatus() 
{ 
    using (ApplicationDBEntities context = new ApplicationDBEntities()) 
    { 

      var results = (from parameters in context.Parameters 
       join application in context.ApplicationIds on parameters.ApplicationId equals application.ApplicationId1 
       where parameters.ParameterName.Equals("DateTime", StringComparison.OrdinalIgnoreCase) && 
       !parameters.Application.Equals(0) 
      select new Application 
      { 
       ApplicationId = parameters.ServiceId, 
       ApplicationStatus = application.Status, 
       DateAdded = parameters.ParameterValue 
       }).ToList(); 

      return new ReadOnlyCollection<Application>(results); 
    } 
} 

在上面的代碼獲取results時會拋出EntityException,在異常的消息是「基礎提供失敗的打開。」具體的行強調是var results = (from parameters in context.Parameters

有了這個,我想通要麼代碼目前住的是不一樣的我有什麼(但願不是這樣),還是其他什麼東西漲,這是當我發現了Inner Exception消息:Login failed for user 'NT AUTHORITY\\ANONYMOUS LOGON'.
連接字符串如下:

<connectionStrings> 
    <add name="ApplicationDBEntities" connectionString="metadata=res://*/ApplicationDBModel.csdl|res://*/ApplicationDBModel.ssdl|res://*/ApplicationDBModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MyServer;initial catalog=MyDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

它試圖從中獲取信息的SQL database是我可以直接訪問的。這可能是因爲IIS帳戶沒有訪問權限嗎?是否有任何提示或暗示試圖找到此問題的根源?

+0

您能否介紹一下您的開發和生產環境的一些細節。它是否在兩個環境中部署到IIS? –

+0

實時它被部署到IIS,本地我從項目的屬性/ Web選項卡創建了一個虛擬目錄,將它添加到我的本地IIS – MattR

+0

是否使用ActiveDirectory用戶轉到sql數據庫(即對於每個用戶網站你創建域用戶並將其添加到SQL)? –

回答

1

在您的連接字符串中存在intergated security = true,這意味着您的網站嘗試從身份驗證身份的sql中獲取數據,並以用戶身份運行IIS的應用程序池。

因此,您應該運行您的iis應用程序池,具有db權限的用戶可能位於您站點的其他資源上。

另一種可能性是有sql用戶去db你應該改變配置文件中的連接字符串。

+0

因此,將DefaultAppPool更改爲在我自己的登錄下運行? – MattR

+0

還行,但它並不理想,因爲它意味着該應用程序池中的所有其他應用程序現在都在我的憑據下運行。是否有我可以使用的標準帳戶?以前它被設置爲NetworkService。或者是否會更新SQL來進行設置? – MattR

+0

如果我是你,我會爲這個應用程序創建特殊的應用程序池。 –

相關問題