測試Silverlight的過程中,發現我的Web Application Project,使用Visual Studio 2008直接執行時測試正常,但移到IIS7下執行,由Oracle讀取的中文卻會變成問號。

我將程式簡化如下:

using (OracleConnection cn = new OracleConnection(cnStr))
{
    cn.Open();
    OracleCommand cmd = 
        new OracleCommand("SELECT '良好' FROM DUAL", cn);
    OracleDataReader dr = cmd.ExecuteReader();
    DataTable dt = new DataTable();
    dt.Load(dr);
    string ss = dt.Rows[0][0].ToString();
    byte[] b = Encoding.Unicode.GetBytes(ss);
    Response.Write(ss + " " + BitConverter.ToString(b));
}
Response.End();

預期要出現的結果應是,良好 6F-82-7D-59,在IIS7上則看到 ?? 3F-00-3F-00

一直在揣摩二者間的差異(ASP.NET Dev Server vs IIS7),想到該不會是x64做怪? 將Web App Project Build Target由Any CPU改為x86,變成以下錯誤:

Could not load file or assembly 'WCS.Web' or one of its dependencies. An attempt was made to load a program with an incorrect format.

研判與Application Pool同時有x64/x86並存有關,另外建了一個App Pool給WCS.Web,則Build成x86也可執行了,但仍無法解決亂碼的問題。

最後Google到一個可疑之處,IIS7的App Pool可以設定是否啟用32bit Application的選項。而之前在Windows 2008 x64裝x86與x64兩個版本的ORACLE Client的經驗刻骨銘心,讓我不禁懷疑與此有關...

預設為False,開啟為True後,可愛的中文終於出現了!!


Comments

Be the first to post a comment

Post a comment