将ASP.NET 5 Web应用作为Azure Web角色使用?

12

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

通常,我们可以右击“Roles”项,从解决方案中的现有项目添加新角色到云服务中。

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

Add Web Role Project in solution...

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

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

5个回答

3

抱歉,我们目前不支持WebRoles。你可能能够用一些方法绕过去,但是官方上并没有提供支持。这也就意味着,任何你所做的修改都需要通过文本编辑器实现,而非工具。

不过,你可以尝试使用Azure WebSite替代,因为这是完全受支持的。

* 但这并不保证一定能够正常运行,我也没有听说过有人这样做成功了。


很想知道是否有人成功运行了这个。我花了半个小时,决定在这里向SO进行一次健全性检查。考虑到即使对于.NET 4.6和客户机操作系统系列4,您也必须手动安装netfx 4.6,我认为需要一些未来的工作才能实现这一点。 - Jeff Wilcox
未来是否有支持这个的计划? - Ender2050
我现在不能使用WebSite(现在是WebApp),因为我有一些遗留的COM对象需要注册到一些旧代码中,而我只能使用Cloud Service来完成这个过程...但我想使用最新的asp.net而不是之后再重新编码...正如Ender所问,WebRoles是否会得到支持? - Dan
这真的很令人沮丧。我们不能使用Web应用程序,因为它们只能是面向互联网的(除非通过web.config白名单 - 这还不够好)。而我们不能使用Web角色,因为它们不支持Asp.Net 5。所以要么我们放弃Azure,要么放弃Asp.Net 5。 - Ian1971
这太糟糕了。无法使用Azure存储模拟器与asp.net核心。使用CSpack,CSrun进行尝试也不起作用。asp.net core何时才能支持Web角色? - Martin Dawson

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 角色上托管多个站点。

您提供的链接没有指向具体的内容。能否请您提供更多信息或更新一下链接? - Martin Dawson
1
我认为这个脚本不需要更多的解释。但是,我已经更新了链接。 - Martin Brandl
我正在遵循这个脚本,但没有$webRoleEntryPoint,我一直收到错误提示CloudServices077:需要为角色webrole1的虚拟路径Web/指定物理目录。我将其指向包含ServiceDefinition.csdef的Azure云目录。 - Martin Dawson
1
我找到了答案,我漏掉了:在.csdef文件中添加physicalDirectory="../SoundVast"$webRoleEntryPoint可以省略,它只适用于工作角色。 - Martin Dawson

1

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

我在这方面遇到了很大的困难,因为我发现文档非常贫乏,没有适当的示例,所以这里提供一个完整的脚本和文件示例,供其他人参考,基于Martin Brandl的答案。 对于仅有Web角色的情况,您不需要webRoleEntryPoint。只用于工作角色。

  • 在您的项目中创建一个新的空云服务。这将为您生成空的ServiceConfigiguration.Cloud.csfgServiceConfigiguration.Cloud.csfgServiceDefinition.csdef文件,以及一个空的roles文件夹。您也可以添加一个Web/Worker角色,让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 设置为 Web 角色,而该角色位于上一级。

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所在位置。


1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接