如果使用Visual Studio 2008/2010針對32位元的WCF Service Library進行Debug時,Visual Studio會很貼心的自動幫我們以Microsoft WCF Service Host來承載該Library,以讓Debug的動作能順利進行。這個動作在一般32位元的作業系統上執行通常是很正常,也很順利就能Work;不過,若是改用64位元的作業系統,要執行Debug的動作時,就不一定會這麼順利了....
如果使用Visual Studio 2008/2010針對32位元的WCF Service Library進行Debug時,Visual Studio會很貼心的自動幫我們以Microsoft WCF Service Host來承載該Library,以讓Debug的動作能順利進行。這個動作在一般32位元的作業系統上執行通常是很正常,也很順利就能Work;不過,若是改用64位元的作業系統,要執行Debug的動作時,就不一定會這麼順利了,你可能會看到Microsoft WCF Service Host跳出如下的視窗:
從視窗裡面提供的訊息判斷,有可能是configuration file(組態檔)的內容有問題,導致它在透過Reflection要去讀取Assembly的時候找不到他要的檔案。但是,真的是這樣嗎!?相同的組態檔,在32位元的作業系統裡跑,就跑得很開心啊~在64位元的作業系統裡面跑,不行就是不行~
其實這個問題是因為Microsoft WCF Service Host會自動依照作業系統是64位元或是32位元,去讀取不同的Library導致,而因為我們的作業系統是64位元的,它很自然的就想去找64位元的Library來讀取,也很自然的就會找不到,所以產生錯誤。
那麼,產生這種問題,但是又非得使用x86版本的Library不可的時候,怎麼辦呢?其實方法很簡單,只要透過VS2008/2010裡面的一個小工具,改變Microsoft WCF Service Host運行方式的旗標就行了,方法如下:
按下開始功能表->所有程式->找到裡面的Visual Studio程式集資料夾(如果使用的版本是VS 2010就是Microsoft Visual Studio 2010),並找到裡面的Visual Studio Tools->Visual Studio Command Prompt (2010)
接著會跳出一個熟悉的DOS視窗,如下圖:
再來我們要切換到放置Microsoft WCF Service Host的執行檔WcfSvcHost.exe的路徑下(預設的路徑為C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\)
最後,我們要使用VS內建的工具Corflags.exe來修改WcfSvcHost.exe執行期的旗標,強制讓它也能相容32位元的應用程式,在命令列上面輸入:Corflags WcfSvcHost.exe /32BIT+ /Force,按下Enter。
沒有意外的話,本來在64位元作業系統裡面不能跑的WCF Service就又會變回一條活龍啦!!
如果有需要更進一步的了解Corflags是幹嘛用的,則可以參考MSDN。