我们的解决方案中有一个ASP.NET 5 Web应用程序。
通常,我们可以右键单击Cloud Service" Roles" item并从解决方案中的现有项目添加新角色。
但它无法将此项目标识为Web角色:
我们如何在Azure Web角色中托管ASP.NET 5项目?
编辑:我们正在使用Azure SDK 2.7
答案 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.csfg
,ServiceConfigiguration.Cloud.csfg
和ServiceDefinition.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.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">
服务定义文件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/