2016-02-19 218 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文件,解決問題。

相關問題