我目前拥有一个带有Web角色的Azure云服务(所以它是一个安装了IIS的虚拟机)。此Web角色当前运行一个独特的Web应用程序(WebAPI项目)。
我尝试做的是创建一个新的Web应用程序,但我需要它在相同的Web角色(即同一个虚拟机上的两个应用程序)上运行以降低成本。我知道它是可能的(两个Web应用程序将在相同的IIS实例上运行,在同一台机器上运行,具有不同的端口)但我无法找到有关如何使用最新版本的Azure SDK。
我找到了很多资源:
但所有人都有点旧(< = 2013),不再申请了。
我目前正在使用Azure SDK 2.6。我已经尝试修改我的ccproj文件(Cloud Service项目文件),因此两个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>
这不起作用,&#34;角色&#34; 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>
答案 0 :(得分:3)
我认为你在csdef文件发生变化时走在正确的轨道上,并且ccproj的错误跟踪发生了变化。所以摆脱你的第二个ProjectReference,因为你只想在一天结束时使用一个WebRole。
在ccproj文件中应该做的是添加如下所示的行:
<MSBuild Projects="..\MyProject2\MyProject2.csproj" ContinueOnError="false" Targets="PublishToFileSystem" Properties="Configuration=$(Configuration);PublishDestination=..\Publish\MyProject2\;AutoParameterizationWebConfigConnectionStrings=False" />
显然有假路径,但重要的是确保csproj文件的路径有效,并确保PublishDestination路径与您在csdef文件中为该站点指定的PhysicalDirectory路径匹配,并且请注意,PhysicalDirectory路径和PublishDestination路径相对于同一位置不。例如,我们在解决方案根目录中保留一个“发布”目录,因此对我们来说,PublishDestination看起来像
..\Publish\MyProject2\
,physicalDirectory看起来像
..\..\..\Publish\MyProject2
您的端点配置看起来正确,但如果无法远程访问角色,请确保您的csdef文件在端点中有一行:
<Endpoints>
<InputEndpoint name="MyProject1Endpoint" protocol="http" port="80" />
<InputEndpoint name="MyProject2Endpoint" protocol="http" port="8080" />
</Endpoints>
...使用与每个站点的endpointName相对应的“名称”:
<Sites>
<Site name="MyProject1Site" physicalDirectory="..\..\..\MyProject1">
<Bindings>
<Binding name="MyProject1Binding" endpointName="MyProject1Endpoint" />
</Bindings>
</Site>
<Site name="MyProject2Site" physicalDirectory="..\..\..\Publish\MyProject2">
<Bindings>
<Binding name="MyProject2Binding" endpointName="MyProject2Endpoint" />
</Bindings>
</Site>
</Sites>
假设您希望每个站点都可以在托管的同一端口上公开访问。如果出于某种原因,MyProject2在端口8081上本地运行,则会将localPort="8081"
添加到该InputEndpoint。