Веб-приложение ASP.NET 5 в роли Azure Web?

В нашем решении есть веб-приложение ASP.NET 5.

Обычно мы можем щелкнуть правой кнопкой мыши элемент "Роли" Cloud Service и добавить новую роль из существующего проекта в решении.

Но он не может идентифицировать этот проект как веб-роль:

Добавить проект веб-роли в решении...

Как мы можем разместить проект ASP.NET 5 в роли Azure Web?

Изменить: Мы используем Azure SDK 2.7

Ответ 1

К сожалению, мы не поддерживаем WebRoles на данный момент. Вы можете * взломать свой путь, но официально поддержки нет. Это означает, что любой хак, который вы делаете, будет в текстовом редакторе, а не в инструментах.

Однако вместо этого вы можете использовать Azure WebSite. Это полностью поддерживается.

* он может вообще не работать. Я не знаю никого, кто сделал это.

Ответ 2

Вам, вероятно, придется самостоятельно создавать свой пакет, используя 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

Он также позволяет размещать несколько сайтов в одной веб-роли.

Ответ 3

Изменить: не может быть выполнено с помощью эмулятора Azure Storage...

Я действительно боролся с этим, так как я счел, что документация серьезно бедна без надлежащих примеров, поэтому здесь приведен полный пример моих сценариев и файлов для кого-либо еще, на основе ответа Мартина Брандла. Вам не нужно webRoleEntryPoint только для веб-роли. Используется только для рабочих ролей.

  • Создайте новую пустую облачную службу в своем проекте. Это приведет к созданию пустых файлов ServiceConfigiguration.Cloud.csfg, ServiceConfigiguration.Cloud.csfg и ServiceDefinition.csdef для вас, а также папки с пустыми ролями. Вы также можете добавить роль web/worker, чтобы визуальная студия могла сгенерировать в них конфигурацию, а затем просто изменила их соответствующим образом.

  • Измените эти файлы (измените 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.csfg и ServiceConfiguration.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"> службы определения файлов службы.

# 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

Теперь файл A .cspkg должен быть сгенерирован в месте расположения вашего $PackagePath.

Ответ 4

Похоже, что в настоящее время он официально не поддерживается как веб-роль. Похоже, что он совместим только с веб-приложениями, а не с более старой веб-ролью. Текущая работа документирована на этом сайте: http://www.codeproject.com/Articles/331425/Running-an-EXE-in-a-WebRole-on-Windows-Azure