ASP.NET 5 Web应用程序作为Azure Web角色?

时间:2015-07-28 06:38:55

标签: azure visual-studio-2015 asp.net-core azure-sdk-.net .net-4.6

我们的解决方案中有一个ASP.NET 5 Web应用程序。

通常,我们可以右键单击Cloud Service" Roles" item并从解决方案中的现有项目添加新角色。

但它无法将此项目标识为Web角色:

Add Web Role Project in solution...

我们如何在Azure Web角色中托管ASP.NET 5项目?

编辑:我们正在使用Azure SDK 2.7

5 个答案:

答案 0 :(得分:3)

您可能需要使用CSPack自行构建程序包。这是一个使用PowerShell和CSPack的示例:

# path to cspack
$cspackPath = Join-Path $env:ProgramFiles 'Microsoft SDKs\Azure\.NET SDK\v2.7\bin\cspack.exe'

$PackagePath = 'c:\mycloudpackage.cspkg'
$serviceDefinitionFile = 'c:\myProject\ServiceDefinition.csdef'
$webRoleName = 'MyWebRole'
$webRolePath = 'c:\myProject'
$webRoleEntryPoint = 'MyWebRole.dll'

# define the cspack parameters
$cspackParameter = @(
        "/out:$PackagePath",
        $serviceDefinitionFile,
        "/role:$webRoleName;$webRolePath;$webRoleEntryPoint",
        "/sites:$webRoleName;Web;$webRolePath"
    )

# execute cspack
& $cspackExe @cspackParameter

它还允许您在单个Web角色上托管多个站点。

答案 1 :(得分:3)

抱歉,我们目前不支持WebRoles。你可能*能够破解你的方式,但正式没有支持。这意味着你所做的任何黑客都将在文本编辑器中,而不是来自工具。

但是,您可以改用Azure WebSite。这完全得到了支持。

*它根本不起作用。我不知道有谁做过这个。

答案 2 :(得分:1)

编辑:无法使用Azure存储模拟器...

我真的很挣扎,因为我发现文档很糟糕,没有适当的例子,所以这里有一个完整的例子,我的脚本和文件供其他人使用,基于Martin Brandl的回答。 仅对于Web角色,您不需要webRoleEntryPoint。仅用于工作者角色。

  • 在项目中创建新的空云服务。这将为您生成空ServiceConfigiguration.Cloud.csfgServiceConfigiguration.Cloud.csfgServiceDefinition.csdef文件以及空角色文件夹。您还可以添加Web /辅助角色,让visual studio在其中生成配置,然后相应地修改它们。

  • 修改这些文件(将physicalDirectory更改为您自己的文件):

ServiceDefinition.csdef

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="SoundVast.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
  <WebRole name="WebRole1" vmsize="Small">
    <Sites>
      <Site name="Web" physicalDirectory="../SoundVast">
        <Bindings>
          <Binding name="Endpoint1" endpointName="Endpoint1" />
        </Bindings>
      </Site>
    </Sites>
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" />
    </ConfigurationSettings>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="http" port="80" />
    </Endpoints>
  </WebRole>
</ServiceDefinition>

<Site name="Web" physicalDirectory="../SoundVast">是重要的一行,physicalDirectory.csdef文件所在的位置相关,我想让我的主要项目SoundVast成为网络角色位于一级。

ServiceConfiguration.Cloud.csfgServiceConfiguration.Local.csfg(两者都可以相同):

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="SoundVast.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2015-04.2.6">
  <Role name="WebRole1">
    <Instances count="1" />
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>

重要的是,角色名称与您的<Role name="WebRole1">服务定义文件Web角色名称匹配。

# path to cspack
$cspackPath = Join-Path $env:ProgramFiles 'Microsoft SDKs\Azure\.NET SDK\v2.8\bin\cspack.exe'

$PackagePath = 'C:\Users\Yamo\Documents\visual studio 2015\Projects\SoundVast\SoundVast.Azure\SoundVast.cspkg'
$serviceDefinitionFile = 'C:\Users\Yamo\Documents\visual studio 2015\Projects\SoundVast\SoundVast.Azure\ServiceDefinition.csdef'
$webRoleName = 'WebRole1'
$webRolePath = 'C:\Users\Yamo\Documents\visual studio 2015\Projects\SoundVast\SoundVast.Azure'

# define the cspack parameters
$cspackParameter = @(
        $serviceDefinitionFile,
        "/role:$webRoleName;$webRolePath;",
        "/sites:$webRoleName;SoundVast;$webRolePath",
        "/out:$PackagePath"
    )

# execute cspack
& $cspackPath @cspackParameter

现在应该在.cspkg的位置生成$PackagePath个文件。

答案 3 :(得分:0)

目前似乎尚未正式支持作为网络角色。它似乎只与Web应用程序兼容,而不是旧的Web角色。目前的解决方案记录在本网站上: http://www.codeproject.com/Articles/331425/Running-an-EXE-in-a-WebRole-on-Windows-Azure

答案 4 :(得分:0)

我刚刚在博客上写了关于如何执行此操作(使用VS工具支持!):https://oren.codes/2017/10/16/using-asp-net-core-with-azure-cloud-services/