天天看點

經曆:asp.net oracle 部署問題以及解決方法

<a href="http://www.cnblogs.com/goldli/">精簡的美麗......</a>

一、環境

    開發環境

        win7 64bit

        Vs2010

        Oracle 11g r2 64bit

        &lt;instantclient-basic-win32-11.2.0.1.0&gt;

    部署環境

        winServer 2008 r2 64bit

        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() &amp;&amp; result.EndsWith("/") ? result : result + "/";

            return result;

        }

    現在可以正常登入了。登入發突然跳出一個對話框。xmlhttpobject。檢查發現這是一個Ajax去通路WebService時出錯列印的内容。錯誤代碼是404。于是調試Ajax跟蹤發現,還是路徑問題。

    在開發環境中Js函數GetRootPath() /網上可以找到/可以正常傳回虛拟路徑。就像函數本身注釋說的,它包含一個項目名稱,而我們部署後是沒有項目名稱這個路徑節點的,是以去掉項目名稱後可以正常傳回虛拟路徑。然後再次登入後發現問題依舊。隻是錯誤代碼變理了500。繼續百度,在經過嘗試後發現更改Web.config,在system.web下增加

    &lt;webServices &gt;

        &lt;protocols &gt;

            &lt;add name="HttpSoap"/&gt;

            &lt;add name="HttpPost"/&gt;

            &lt;add name="HttpGet"/&gt;

            &lt;add name="Documentation"/&gt;

        &lt;/protocols&gt;

    &lt;/webServices&gt;

    後可以正常通路WebService。理由是iis預設不允許通路WebService(這是什麼規定啊)。

    以上是我第一次asp.net網站部署經曆。留痕以備查閱。