2013年3月16日 星期六

水晶報表~佈署注意事項

經歷了前兩篇的風風雨雨之後~以為萬事大吉的我終究還是太天真了!
ASP.Net哪有可能這麼聽話。
好不容易將本機開發環境、IIS都整理的服服貼貼了,結果deploy上到Test server卻給我跑出
無法載入組件




排在他前面那幾個明明ok的說 ...
版本確認是沒問題的~local跟server都是 CR13
差別在local有灌SDK, server只有安裝Runtime
比較了一下Assembly資料夾裡面組件發現 CrystalDecisions.ReportAppServer.ClientDoc
在Local的時候有兩個AMD64 & MSIL兩種版本的組件 ,但在Server只有 AMD64!唉直覺又是X64跟X32的問題... 
 
一樣建一個單純的Crytal report網站來測試
關鍵點是:
1.應用程式集區是使用Framework2.0 or 4.0
2.允許執行32bit程式 true | false

交叉測試之下只有一個組合不行: .Net4.0 + win32=true
好死不死我的正式環境就是用這個Q_Q
 ...這裡不得不抱怨我們AP的主導人員~搞了一個DAL要作為AP連結DB的介面層,但結果克服不了Oracle client X64的問題而只能release x32編譯的版本出來..囧。
結果就是在X64環境開發、放到X64 Server上,結果執行的是X32程式 
這個東西當初推出的目的是要整合Oracle, MSSQl提供一個共用的存取介面,再利用WCF的方式存取資料達到跨平台的效果 。結果現在WCF因為效能考量被抽掉了、我們在寫SQL也沒有辦法過濾PLSQL跟T-SQL語法的差異。並且透過DAL連SQL Command帶Parameter的方式也不能用了,又回到從前要自己想辦法過濾sql injection的日子~DBA表示不關他的事,寫AP的人要自己處理XD
~想想這個東西到最後只是個笑話而已了吧!

話說回來~由於我安裝的是X64版的執行環境,結果因為不得已的理由要開啟win32=true
結果好死不死Runtime裡面沒包CrystalDecisions.ReportAppServer.ClientDoc的MSIL編譯版本(MSIL是將程式編譯成與x86x32無關的指令碼~以相容於各種CPU平台)。所以他只會去找x32版的ClientDoc。於是就出現那個該死的載不到組件的訊息了~
由於要做的事還很多,實在是不想再卡在這個環境問題上。
嘗試用最笨的方法來處理...把SDK拿來Server灌~果然MSIL版本的組件就出現了。
測試一下終於可以正常顯示報表了~ 收工@_@



沒有留言: