我目前擁有一個具有Web角色的Azure雲服務(因此它是安裝有IIS的虛擬機)。此Web角色當前運行一個獨特的Web應用程序(WebAPI項目)。在同一個Azure WebRole(雲服務)上運行多個應用程序
我想要做的是創建一個新的Web應用程序,但我需要它運行在同一個Web角色(即同一虛擬機上的兩個應用程序)上以降低成本。我知道這是可能的(兩個Web應用程序將運行在同一個IIS實例上,同一臺計算機上,具有不同的端口),但我找不到有關如何使用最新版本的Azure SDK執行操作的資源。
我發現很大的資源:
- Multiple site strategy on web role(s) and cloud service(s)
- https://michaelcollier.wordpress.com/2013/01/14/multiple-sites-in-a-web-role/
- http://www.wadewegner.com/2011/02/running-multiple-websites-in-a-windows-azure-web-role/
- http://blog.elastacloud.com/2011/01/11/azure-running-multiple-web-sites-in-a-single-webrole/
但都有點老了(< = 2013)和不適用了。
我目前使用的是Azure SDK 2.6。我試着改變我的ccproj文件(雲服務項目文件),因此兩者的WebAPI項目共享相同的RoleName
:
<ProjectReference Include="..\MyProject1.csproj">
<Name>Website</Name>
<Project>{...}</Project>
<Private>True</Private>
<RoleType>Web</RoleType>
<RoleName>MyRole</RoleName>
</ProjectReference>
<ProjectReference Include="..\MyProject2.csproj">
<Name>Website</Name>
<Project>{...}</Project>
<Private>True</Private>
<RoleType>Web</RoleType>
<RoleName>MyRole</RoleName>
</ProjectReference>
這是不行的,在Visual Studio中我的項目的「角色」節點顯示錯誤("no project associated [project 2 name]
)。
我還試圖修改我的ServiceDefinition.csdef
文件:
<WebRole name="xxxx.Frontend.Azure" vmsize="Small">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
</Bindings>
</Site>
<Site name="AnotherWeb" physicalDirectory="foo">
<Bindings>
<Binding name="Endpoint2" endpointName="Endpoint2" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="8080" />
<InputEndpoint name="Endpoint2" protocol="http" port="8090" />
</Endpoints>
</WebRole>
沒有任何運氣。
我該如何繼續?
編輯:
下面是與修改多個站點我目前csdef文件支持:
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="AzureCloudService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WebRole name="XXX.YYY" vmsize="Small">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
</Endpoints>
<Imports>
<Import moduleName="RemoteAccess" />
</Imports>
</WebRole>
<WebRole name="XXX.ZZZ" vmsize="Small">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
</Bindings>
</Site>
<Site name="ZZZ" physicalDirectory="..\..\..\XXX.ZZZ\azure.publish">
<Bindings>
<Binding name="Endpoint2" endpointName="Endpoint2" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="8081" />
<InputEndpoint name="Endpoint2" protocol="http" port="8090" />
</Endpoints>
<Imports>
<Import moduleName="RemoteAccess" />
</Imports>
</WebRole>
</ServiceDefinition>
謝謝,這使我在正確的軌道(我認爲)。我仍然需要解決一些問題,但這聽起來很有前途 – ken2k
嗯,我成功地將我的兩個應用程序部署在同一個Web角色上。不幸的是,只有其中一個通過互聯網可用(我試圖達到另一個時出現超時)。我已經遠程連接到虛擬機(使用RDP),我可以看到兩個應用程序都正確部署/運行,並且都可以在本地訪問。所以我假設一個應用程序有一些網絡配置問題,在通過Internet訪問時沒有響應。任何想法?謝謝 – ken2k
本地可訪問的角色,但不是遠程的,它必須是端點配置問題。您的原始問題中的Endpoint配置看起來是正確的,但我仍然在回答中添加了一些示例配置行。希望能幫助到你! –