2016-02-19 127 views
8

我在ASP.NET 5(CoreCLR)上有一个应用程序,我尝试将它发布到Microsoft Azure。我使用免费Web App(非VDS)部署ASP.NET 5(ASP.NET Core)应用程序到Azure的问题

我发布的应用程序使用Visual Studio 2015 Publish->Microsoft Azure及以下this instructions

但是,当我发布它,并尝试打开,我看到只是不停的加载空白页面。我启用日志记录并查看来自Azure的日志(stdout.log),但仅有:

'"dnx.exe"' is not recognized as an internal or external command, 

可操作的程序或批处理文件。我试图用git做Continiusly publishing。在推送过程中,它开始恢复软件包并失败,出现错误no disk space available

有没有办法将ASP.NET 5应用程序发布到Azure Web App?

+0

请发布您的存储库的关键内容(例如project.json,startup.cs,web.config ...)然后我们可以提供特定的帮助。 –

回答

4

简答

但是当我发布,并尝试打开,我看到的只是空白页面的不停加载。

发生这种情况时,我们的应用程序无法发布运行时(dnx.exe)与应用程序。

讨论

有几种方法来发布ASP.NET核心RC1应用到Azure的Web应用程序。这些包括使用Git进行连续部署以及使用Visual Studio进行发布。发布您的存储库的内容以获得特定帮助。

该示例是通过GitHub连续部署部署到Azure Web App的ASP.NET Core rc1应用程序。这些是重要的文件。

app/ 
    wwwroot/ 
     web.config 
    project.json 
    startup.cs 
.deployment   <-- optional: if your app is not in the repo root 
global.json   <-- optional: if you need dnxcore50 support 

应用程序/ wwwroot文件/ web.config中

添加HttpPlatformHandler。将其配置为将所有请求转发给DNX进程。换句话说,告诉Azure Web应用程序使用DNX。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer> 
    <handlers> 
     <add name="httpPlatformHandler" 
      path="*" verb="*" 
      modules="httpPlatformHandler" 
      resourceType="Unspecified"/> 
    </handlers> 
    <httpPlatform 
     processPath="%DNX_PATH%" 
     arguments="%DNX_ARGS%" 
     stdoutLogEnabled="false" 
     startupTimeLimit="3600"/> 
    </system.webServer> 
</configuration> 

应用程序/ project.json

包括红隼服务器上的依赖。设置将启动Kestrel的web命令。使用dnx451作为目标框架。请参阅下面的目标dnxCore50的额外工作。

{ 
    "dependencies": { 
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final" 
    }, 

    "commands": { 
    "web": "Microsoft.AspNet.Server.Kestrel" 
    }, 

    "frameworks": { 
    "dnx451": { } 
    } 
} 

应用程序/ Startup.cs

附上Configure方法。这增加了一个非常简单的响应处理程序。

using Microsoft.AspNet.Builder; 
using Microsoft.AspNet.Http; 

namespace WebNotWar 
{ 
    public class Startup 
    { 
     public void Configure(IApplicationBuilder app) 
     { 
      app.Run(async (context) => 
      { 
       await context.Response.WriteAsync(
        "Hello from a minimal ASP.NET Core rc1 Web App."); 
      }); 
     } 
    } 
} 

。部署(可选)

如果您的应用程序不在存储库根目录中,请告诉Azure Web应用程序哪个目录包含该应用程序。

[config] 
project = app/ 

global.json(可选)

如果你想针对.NET的核心,告诉Azure中,我们要瞄准它。添加此文件后,我们可以用我们的project.json替换(或补充)dnx451条目与dnxCore50

{ 
    "sdk": { 
    "version": "1.0.0-rc1-update1", 
    "runtime": "coreclr", 
    "architecture": "x64" 
    } 
} 
+1

我遇到的两个问题1)我得到了一个部署失败的错误 - 我正在使用免费定价等级,我不得不更换为BASIC。 2)对于MVC项目,它需要一些时间来加载 - 我得到一个500内存的SQL应用程序错误。 – Anuraj

3

首先,是的,你可以很开心地在Azure上运行ASP.Net 5核心应用程序,但也有一些问题。

不要知道为什么它不起作用,当你从Visual Studio本身发布(那么他为什么发布一个答案,我听到你问...),但这里有一些东西要看看在;

  • 尝试在IIS本地运行(而不是kestrel) - 只是为了查看是否有问题。例如,您需要一个设置为的Web.config,您需要启动cs中的app.UseIISPlatformHandler。
  • 看看你的global.json文件。它不应该从Visual Studio发布时很重要,但它不会伤害到正确设置。你可以这样做:

{ 
    "sdk": { 
    "version": "1.0.0-rc1-update1", 
    "runtime": "coreclr", 
    "architecture": "x64" 
    } 
} 

对于连续发布 - 这是一个已知的问题与我花了几个小时的免费和共享站点和一个。基本上,当您使用此机制进行部署并指定corecelr时,将从Nuget重新安装整个运行时,并且占用将近1GB(免费和共享站点的配额)。添加一些NPM软件包,你超过了限制,嘿,你不能部署。 @shanselman最近在他的一个播客中对此进行了讨论。它实际上并不是占用所有空间的运行时二进制文件,而是因为我们处于构建模式,因此所有文档XML文件都已安装,因为Nuget不知道您不在开发环境中,而且它们非常庞大。 现在,最简单的答案,如果你想连续发布免费共享网站也包括完整的运行时在你的project.json和设置你的global.json使用完整的CLR,而不是coreclr。非常令人沮丧。

+0

我们不需要'app.UseIISPlatformHandler'在Azure Web App中托管。尽管如此,我仍然赞同这个有用的答案。 :) –

+2

我看到了 - 今天我学到了一些新东西:)然后谢谢! – Frans

+0

这是最新的吗?您是否看到关于免费/共享实例上的运行时安装问题的其他讨论?我一直在努力寻找更多的信息,但现在谷歌搜索正确的信息很困难,因为每个人都在调用ASP.NET Core五个不同的东西。 另外值得一提的是:在尝试通过VS在线构建和部署应用程序时,这似乎也是一个问题。 – Aejay

0

我遇到了同样的问题。这answer解决了这个问题。

使用asp.net核心模板创建新项目时,global.json文件是我的API项目的一部分,但它也在“解决方案项目”文件夹中引用。当发布到Azure的API应用程序,二global.json文件进行部署:

  1. /approot/global.json
  2. /approot/src/MyAPI/global.json

我感动global.json文件出项目文件夹来解决根,并重新将参考添加回解决方案项目文件夹。

部署时只部署/approot/global.json文件,解决问题。

相关问题