小小網站搬家記

原本家中一個小小的網站,現在決定搬到外面獨立,於是我找了一些免費的 ASP.NET 網路空間,最後決定

Somee.com – 免費ASP空間,支援MS Access / FTP 立即啟用!

基本上註冊完一天後就可以用了,它支援
  • FTP Access (上傳網站用)
  • ASP.NET v1.1-4.0
  • AJAX v1.0, 3.5 (用不到)
  • Silverlight (用不到)
  • MS Report Viewer 2005, 2008 (取代原本的 Crystal Report)
  • MS Access 2003, 2007 (存一些簡單的資料庫)
  • MS SQL 2005 Express (存放 Membership)
還有一些林林總總的就不列出來,以上就以經夠我用了。

以下是搬家過程中碰到的一些問題,特別記錄一下,以備將來之用



設定 Membership SQL database


在 Visual Studio 2008 網站專案中點選  網站 | ASP.NET 組態,在管理工具中設定
  • 在 安全性  將驗證類型設定為從網際網路使用 Web Form 登入的方式
  • 建立使用者 (角色應該暫時不需要)
設定完成後就會在 App_Data 下多一個 ASPNETDB.MDF 資料檔 (可能要重新整理一下才看得到)。上 SOMEE 網站的管理頁面,先建立一個空白的 SQL 資料庫,然後再用 Attach 的方式將剛剛產生的檔案上傳,就完成 Membership 資料庫的建立了


點選網站後就有登入的帳號、密碼跟連線字串。直接到 IIS 管理員的 網站 | 連接字串,直接把 LocalSqlServer 換成我們的連線字串即可。(另外在這裡也可以管理使用者,就不用使用 Visual Studio 2008 的 ASP.NET 組態管理工具了)

完成以上動作後,就會更新到 web.config,屆時把檔案上傳到網站即可,這樣登入的部份就搞定了。

題外話:原本 Database 轉移是用備份、還原的方式,但備份時一直發生無法寫入的錯誤。原來 SQL Server 是使用 Network Service 的身份登入 (在 控制台 | 系統管理工具 | 服務 那邊可以查到相關的資訊),所以要寫入的資料夾在安全性的設定上必須有該使用者的寫入權限即可。

修正網站導覽問題


網站原本使用 .Net Framework 2.0,TreeView 搭配 Sitemap 可根據登入使用者的權限顯示對應的節點。但搬到 SOMEE 換成 .Net Framework 3.5 後,這個功能卻失效了。後來從 web.config 中發現:2.0 的 system.web/siteMap 的 defaultProvider 是 XmlSiteMapProvider,其中 securityTrimmingEnabled 屬性設為 true;而 3.5 是使用 AspNetXmlSiteMapProvider,其中並未設定上述屬性。所以只要手動把 XmlSiteMapProvider 加回來即可。

參考:ASP.NET 網站導覽安全性調整

報表功能


原本我的程式是使用 Crystal Report,但網站沒提供相關的服務,所以只好改用 MS Report Viewer,但使用後卻發生 "RSClientController is undefined" 錯誤訊息,結果又是 web.config 的問題,參考以下的文章,在 system.webServer/handlers  加上以下的設定即可



參考:【茶包射手專欄】ReportViewer 2008 on IIS7RDLC In IIS7

此外 ReportViewer 是以絕對路徑的方式指到報表檔,所以上傳到網站後就找不到了。解決的辦法是在 Page_Load 時搭配 Server.MapPath 來指定報表檔的位置

ReportViewer 是三層式的架構,最底層是資料提供者,通常是放在 App_Code 裡面的 DataSet,DataSet 可利用 TableAdapter 用 SQL command 從資料庫中抓資料進來,同時也提供參數查詢的功能 (原變數名稱如果是中文的話,記得改成英文)
  • 如果是 SQL Server,則採用 @ 開頭的具名參數
  • 如果是 Access,則採用 ? 的不具名參數,所以傳遞參數時順序要一致
中間層則是報表本身,設計上跟 Crystal Report 沒有太大的差異,一樣有群組、頁首、頁尾等功能。  另外在報表外面按滑鼠右鍵可以設定報表參數 (不過尚未研究用途)

不過有一點要特別注意,就是 RLDC 報表無法變更報表資料來源名稱, 即使 DataSet 名稱已變更,RLDC 仍然抓不到,只能重建。所以建議不要從 ReportViewer  控制項的智慧型標籤新增報表,而要從底層 DataSet 開始建立,這樣才能自訂名稱。

最後展現層只要在網頁中拉一個 ReportViewer 的控制項進來,在智慧型標籤選擇剛剛建立的報表就可以了。選擇完畢會帶出一個 ObjectDataSource 用來包裝底層的 DataSet,如果有查詢參數的話,可以在這邊設定連結到對應的控制項,不過我的 Access 沒有用,所以只好在程式中用設定 SelectParameters[0].DefaultValue 的方式設定了。

試用後的問題


在新增訂單時會呼叫 DateTime.Today.ToShortDateString() 填入今天的日期,但該日期格式跟文化特性是有關係的,原本是年月日,但搬到國外後就變成月日年,所以只好在 web.config 強制設為台灣的格式了。

<configuration>
    <system.web>
        <globalization culture="zh-TW" uiCulture="zh-TW" />
    </system.web>
</configuration>

Tips
  • 上傳檔案如果太多,沒辦法一個一個上傳時,可以用 Zip 的方式打包,上傳後就會自己解開了,而且連資料夾都可以,太帥了!(不過批次上傳的中文檔名會變成亂碼)
  • 若要編輯 web.config,可以到 IIS 管理員,選擇到對應的網站後,設定編輯器 即可編輯 (最好不要用手動的方式改)。例如要設定網站的風格,到 system.web/pages,將 theme 設為 Default,套用後再上傳即刻生效。
  • 備份功能需將檔案寫入 Server 端,目前無法使用,再想辦法。
  • 網站預設的 default.asp 要改名字,否則不會用預設的 Default.aspx
  • 網頁中的中文如果上傳後變成亂碼, 用記事本開啟後另存成 UTF-8 格式再重新上傳即可 (話說為何用 Visual Studio 編輯存檔後格式會跑掉?)
問題
  • Login 控制項無法顯示中文
  • SOMEE  網頁中,變數名稱等無法使用中文
  • 報表顯示在 IE9 下有問題,欄寬設定不正確
  • 報表群組的文件式導覽功能,在 IE 會產生程式錯誤,在 FireFox 則完全出不來,慘!



2013/4/13

因應新車牌將 "車子" 資料表的 "車號" 欄位由 7 個字元改為 8 個字元,沒想到報表卻出錯了


查了半天才發現是 App_Code 裡面 xsd 檔案的問題

              <xs:element name="車號" msprop:Generator_UserColumnName="車號" msprop:Generator_ColumnVarNameInTable="column車號" msprop:Generator_ColumnPropNameInRow="車號" msprop:Generator_ColumnPropNameInTable="車號Column" minOccurs="0">
                <xs:simpleType>
                  <xs:restriction base="xs:string">
                    <xs:maxLength value="7" />
                  </xs:restriction>
                </xs:simpleType>
              </xs:element>

原來一開始建立的時候連欄位長度都被設定了,結果直接改 Access 檔案時,這邊沒有一起更新就會產生錯誤了

參考: 求救!! 使用DataSet Designer設計出來的表格 查詢時出現問題

另外還有一個 OLEDB 的問題如下:


原來 OLEDB 不支援 64-bit OS,只要新增一個應用程式集區,改為 32-bit 即可


參考:[ASP.NET]Microsoft.Jet.OLEDB.4.0 提供者並未登錄於本機電腦上 處理方式

留言

這個網誌中的熱門文章

Linux 批次檔的寫法

【分享】如何顯示 Debug Message

[分享] Visual Studio 遠端偵錯