2011-09-27 113 views
-1

我很難部署我的網站。 我得到了一些錯誤,他們得到解決,我成功地發佈了我的網站,但當我嘗試打開任何頁面時,它會給我404或500錯誤數據庫部署問題

我的主機提供商告訴我,如果此頁使用數據庫,沒有部署那麼這可能是問題 所以我試圖部署我的數據庫,我得到connectionString錯誤。

的問題是,我不存儲我的connectionString在web.config 它保存在我的基地DAL類的屬性和它的使用所有的DAL類 所以我更新了,但我得到同樣的錯誤

我不知道什麼是錯的,我應該在web.config中包含connectionString?

N.B當我構建軟件包並嘗試將活動模式設置爲'release'時,它將設置返回到'debug'!

+0

嘗試使用VS調試器模式連接到您的遠程數據庫,並查看異常情況。 – mservidio

+2

數據庫是否託管在可從託管服務提供商處訪問的地方? – alun

+0

@mservidio ..我試圖從VS2010訪問我的數據庫,它是成功的,我沒有遇到任何問題,我跑了查詢和東西 – lKashef

回答

-1

對不起創建,但所有的答案告訴我,我需要把「的ConnectionString」在「網絡。配置',但實際上,當我將我的應用程序添加到虛擬目錄時,整個問題得到了解決,我不需要更改我的DAL層或添加任何內容到web.config

當然,我從你的答案中學到了,欣賞它,但不,我不需要添加任何東西在我的web.config如果我決定有這種設計模式。

1

「我應該在web.config中包含connectionString嗎?」

是的,您的連接字符串應該在web.config的<connectionStrings>部分定義正是這個原因 - 讓您可以輕鬆地更改設置將應用程序部署到不同的時,指向不同的數據庫環境環境,而不需要重新編譯你的代碼。

+0

好吧,但我已經在我的基地DAL類中定義了一個connectionString,並且我將它更新爲設置爲我的新數據庫connectionString。當我發佈它已經重建我的類和創建一個新的DLL,我錯了嗎? – lKashef

1

IIS在配置文件中識別您的連接字符串。我看到它在查看某個應用程序時通過IIS管理控制檯公開它們。我曾經有類似的問題,結果證明這是一個身份驗證問題。 IIS上的應用程序在某個池中和某個用戶下運行。如果您指定在連接字符串中使用Windows身份驗證(集成安全性),則該用戶必須有權訪問數據庫。如果運行應用程序的用戶沒有連接數據庫的必要權限,則應在連接字符串中明確指定用戶名和密碼。

在任何情況下,你可以在你的web.config打開includeExceptionDetailInFaults,並得到一點點,爲什麼你的服務失敗,像這樣的詳細信息(msdn):

<serviceBehaviors> 
    <behavior> 
    <serviceDebug includeExceptionDetailInFaults="true"/> 
    </behavior> 
</serviceBehaviors> 
+0

我認爲這很好,但我有一個共享主機帳戶,所以我需要指定一個用戶,並通過,我已經在我的connectionString聲明它。也許問題是關於我的問題..例如我的sql語句是這樣的「SELECT * FROM Table1 not user.Table1 ..我必須改變我的整個DAL包括數據庫用戶?.. btw我聲明我的connectionString在一個類爲了保護它免受使用我的應用程序修改它的任何人,所以我可能是唯一一個可以讓這個應用程序工作的人,那麼這是錯誤的嗎? – lKashef

+0

你不能真正「保護」連接字符串。你可以防止人們修改它,但是爲什麼你想要這樣做有點令人質疑,保證這些信息的唯一方法就是完全移除它並讓用戶或最終用戶提供它,當然在運行的應用程序中在IIS上是沒有辦法的,但是要包含它,但是如果你將它包含在配置中,你仍然可以在本地IIS上這樣做,而且你不必將這個字符串發送到其他地方。 – Andreas

+1

關於你的查詢,我不知道不認爲這應該是一個問題,如果那麼你需要用方案名稱來限定它(dbo是默認名稱)。而且你還必須考慮查詢在本地工作。你是否已經試圖獲得確切的異常細節?我認爲對於調試你應該暫時把它打開,否則你只會猜測。 – Andreas

1

假設你的DAL是一個類庫,我會將連接字符串存儲在app.config中。這樣,您可以輕鬆更改連接字符串,而無需在每個使用該庫的Web應用程序中放置連接字符串。

+0

是的,它是一個類庫。我有一個基類,所有我的DAL類繼承。在基類中,我有屬性ConnectionString,它在開發階段中設置,在完成之後,它在DLL中受到保護,並且從此基類繼承的任何類都可以非常輕鬆地使用屬性ConnectionString。唯一需要了解我的數據庫的層,它的connectionString是DAL ..所以我的Web應用程序永遠不需要知道connectionString是什麼..我試圖給你更多關於我的設計的細節,希望你能幫助 – lKashef

+1

如果您具有'ConnectionString'屬性從庫的app.config中提取連接字符串,則您的設計將更加靈活。如果您擔心安全問題,請在部署後加密連接字符串部分。 –

+0

好吧,如果我這樣做了,我不需要web.config中的任何connectionStrings? ..和btw在哪裏可以找到app.config? – lKashef

1

「問題是我沒有在web.config中存儲我的connectionString它存儲在我的基類DAL類中的一個屬性中,它被所有的DAL類使用,所以我更新了它,但是我得到了同樣的錯誤」

是的,硬編碼連接字符串是一個主要問題。要回答你的下一個問題「我應該在web.config中包含connectionString?」,答案是YES。

至於數據庫的正確部署,你可以看看我this blog entry 2008年

+0

好的,但connectionString將位於Web應用程序項目中,我的DAL位於單獨的類中圖書館..我將如何能夠從我的DAL訪問它? – lKashef

+0

如果你不能從配置中奇蹟般地獲取連接字符串,你會如何看待它到達DAL類?獲得它的機制很簡單:將它作爲參數傳遞給調用以獲取數據的方法。我假設,既然你有它的硬編碼,你已經有了設置連接字符串的機制。 –

+0

嗯所以每次我連接到數據庫我應該通過ConnectionString? ..現在有必要將其存儲在web.config中以避免硬編碼connectionString的問題,並且仍然可以從我的DAL類庫訪問web.config連接字符串? – lKashef