標籤:blog http io ar os sp 檔案 資料 on
原文:[原創]經曆:asp.net oracle 部署問題以及解決方案
精簡的美麗......
一、環境
開發環境
win7 64bit
Vs2010
Oracle 11g r2 64bit
<instantclient-basic-win32-11.2.0.1.0>
部署環境
winServer 2008 r2 64bit
Oracle 11g r2 64bit
<instantclient-basic-win32-11.2.0.1.0>
iis7.5
二、部署問題及解決方案
在VS項目上右鍵,選擇"發布"。發布方式為"檔案系統",指定目標位置。發布後找到目標檔案夾,拷貝所有檔案到伺服器IIS中建立的目錄裡。以http://伺服器ip:連接埠訪問可以開啟登入頁,點擊登入後顯示"無法顯示此頁"。
百度"無法顯示此頁",結果尋找到無數條問答。挑選排名靠前的幾項試過之後問題依舊。
無奈,Response.Write();Response.End();輸出判斷在執行到哪一步時出現上述問題。結果發現在執行Response.Redirect()時出現上述問題。Response.Write(跳轉url),發現目標路徑(...../index.aspx)中多了一個"/"。於是尋找擴充方法VirtualRoot(),發現在對page.Request.ApplicationPath取值時並沒有判斷其是否以"/"結尾(是否處於已部署環境),修改此方法後問題解決。
public static string VirtualRoot(this Page page)
{
var result = page.Request.ApplicationPath;
result = !result.IsNullOrEmpty() && result.EndsWith("/") ? result : result + "/";
return result;
}
現在可以正常登入了。登入發突然跳出一個對話方塊。xmlhttpobject。檢查發現這是一個Ajax去訪問WebService時出錯列印的內容。錯誤碼是404。於是調試Ajax跟蹤發現,還是路徑問題。
在開發環境中Js函數GetRootPath() /網上可以找到/可以正常返回虛擬路徑。就像函數本身注釋說的,它包含一個項目名稱,而我們部署後是沒有項目名稱這個路徑節點的,所以去掉項目名稱後可以正常返回虛擬路徑。然後再次登入後發現問題依舊。只是錯誤碼變理了500。繼續百度,在經過嘗試後發現更改Web.config,在system.web下增加
<webServices >
<protocols >
<add name="HttpSoap"/>
<add name="HttpPost"/>
<add name="HttpGet"/>
<add name="Documentation"/>
</protocols>
</webServices>
後可以正常訪問WebService。理由是iis預設不允許訪問WebService(這是什麼規定啊)。
好了,網站總算能開啟全部頁面了。心情愉悅啊。Oh,man.what is going on?為什麼會出現亂碼?難道資料庫字元集不對?趕快Plsql對比下兩個資料庫有什麼不同?結果,shit。一樣的。繼續百度,並且wen.lu。在被網路上各種解決方案轟炸了N遍之後,終於在 asp.net oracle 中文亂碼 解決方案 找到瞭解決方法。人家說,不用更改什麼字元集,要想讓你的oracle支援unicode只需要在連接字串裡加上Unicode=True就可以了。加上,ok,網頁是那讓人討厭的??總算沒有了。
以上是我第一次asp.net網站部署經曆。留痕以備查閱。
經曆:asp.net oracle 部署問題以及解決方案