2013年3月29日

[Azure]使用VS2012開發Cloud Service程式並設定兩個webrole instance時,IISExpress停止工作

使用Visual Studio 2012開發Cloud Service程式時,可以透過Compute Emulator在本機上模擬並偵錯;

正常情況下,VS允許我們在本地端模擬有一個以上role instance時的情況。不過偶爾會有人遇到設定了一個以上的Role Instnace時,IISExpress Crash的狀況。

當Compute Emulator執行時,我們可以在C:\Users\<USER ID>\AppData\Local\dftmp\Config目錄下找到執行環境的設定檔,

裡面可以找到這一段:

<Endpoint name="Endpoint1" address="127.255.0.0" port="82" publicPort="0" protocol="http" />



由這裡可以知道Compute Emulator中設定的Web Role的IP。如果設定了多個Role Instance,就會在這裡看到多個檔案。



如果我們在不同Instance設定檔裡,發現了同樣的IP設定,則由於不同的IISExpress不可以bind同一個IP + Port,我們的IISExpress很有可能因為這樣而Crash。



經過一番艱苦的奮戰…好啦,其實沒有那麼艱苦,解決的方法是,打開Regedit,找到下面這一段registry,把值改為大於等於1即可。



HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\DevDiv\vs\Servicing\10.0\SP



Windows Azure SDK在1.5版之前,當設定兩個以上role instance在本機時,是透過127.0.0.1及不同的Port number來區分instance;在1.5版之後則改為以127.255.X.X的IP來區分instance,這個key是IISConfigurator.exe中為了workaround 1.4版與1.5+版SDK不同做法所加上的。



如果我們的機器上曾經安裝過較早期的SDK版本,那麼就有可能會遇到這個問題。

沒有留言:

Blog Archive

About Me