WindowsAzure上把WebApp和WebService同時部署在一個WebRole中
最近開發一個和WindowsAzure相關的應用,該應用還調用了一個WCFService,在開發過程中一直把Web和WCFService分別作為WebRole進行部署,但是,臨近末了客戶才要求為了節省Azure的相關費用要把二者合并部署。
如果是普通的Web應用,則可以在IIS中建立一個網站後,把WebService作為其一個虛擬目錄即可。經過調查發現這是Windows Azure v1.3 的一個新特性:Full IIS,它允許開發人員在同一個WebRole中建立多個不同的應用。下面這個URL有這方面的更多介紹,請參考http://www.wadewegner.com/2011/02/running-multiple-websites-in-a-windows-azure-web-role/。
1. 首先,我們先用VS2010建立一個WindowsAzure的解決方案,並添加兩個WebRole(WebApp和WebService)。
2、在解決方案中移除WebService這個項目,同時把FullIIS下的Roles目錄中的WebService也刪除了。如。
3、通過添加現有項目,把WebService項目再添加到該解決方案中。如。
說明:以上這一刪一加的動作,是為了使FullIIS中只有一個WebRole(咱們這篇文章的目的不就是在一個WebRole中既要部署WebApp又要部署WebService這兩個應用嘛)。
4、實現WebService和WebApp的商務邏輯(省略)。
5、修改ServiceDefinition.csdef檔案,在Site下面添加一個VirtualApplication。請參考下面的csdef檔案配置。
<?xml version="1.0" encoding="utf-8"?><ServiceDefinition name="FullIIS" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition"> <WebRole name="WebApp"> <Sites> <Site name="Web"> <VirtualApplication name="Services" physicalDirectory="../WebService" /> <!--重點部分--> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites> <Endpoints> <InputEndpoint name="Endpoint1" protocol="http" port="80" /> </Endpoints> <Imports> <Import moduleName="Diagnostics" /> </Imports> </WebRole></ServiceDefinition>
6、在VS2010中,直接F5啟動,WebApp已經啟動。這時開啟“管理工具”——“IIS管理器”,在IIS管理器中可以看到FullIIS.WebApp這個Site下有一個Services的虛擬目錄,如(日文系統的圖片)。
把該Azure應用打包會產生一個FullIIS.cspkg的發行檔案包,把該檔案上傳到WindowsAzure後就達到了在一個WebRole中通過虛擬目錄的方式部署多個應用的目的了。
注意:在WindowsAzure中最好選擇Windows Azure Guest OS 2.0的作業系統,它搭載的是 Windows Server 2008 R2 和IIS 7.5。