Веб-приложение 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
Ответ 5
Я только что писал о том, как это сделать (с поддержкой VS tool!) здесь: https://oren.codes/2017/10/16/using-asp-net-core-with-azure-cloud-services/