2016-03-21 13 views
8

Asp.net çekirdeğindeki bir uygulamayı program aracılığıyla nasıl yeniden başlatabilirim?Asp.net çekirdek uygulaması nasıl programlı olarak yeniden başlatılır?

Önbelleği temizlemek ve uygulamanın yeniden girişe girmesine neden olmak istiyorum.

+0

Sadece daha iyi anlamak için, bunu neden ihtiyacım var? –

+0

Bence en yaygın senaryo benim için bazı yönetim görünümleri aracılığıyla uygulamanın ayarlarını değiştirmektir. Ayarlar genellikle başlangıçta başlatılan şeylerdir. –

+1

Yeni bir sürümü yayınlamak ve –

cevap

3

Yalnızca geliştirme senaryosu için buna ihtiyacınız varsa, dotnet-watch (dotnet) veya dnx-watch (dnx için) kullanabilirsiniz.

Uygulamanızın üretime yeniden başlamasını istiyorsanız, izleyicinin yaptıklarına benzer bir şey uygulamak zorundasınız. İşlemi öldürmek ve yeniden başlatmak için harici bir sürece ihtiyacınız var. Ya da kendi örneğini başlatmak için uygulamanıza ihtiyaç duyuyor ve sonra kendini öldürüyor. Ne yazık ki, bunun için kutunun dışında bir şey yok.

+4

yeniden başlatmak olduğunu düşünebilirsiniz başka bir kullanım olduğunu Bir kesmek olurdu, ama uygulama bir uygulama yeniden başlatmayı tetikleyecek bir yapılandırma dosyasını program aracılığıyla değiştirebilir mi? –

13

Güncelleme: Mirask's answer Eğer host.Run() çağrısını göreceksiniz Program.cs NET Çekirdek 2.

için daha doğrudur. Bu yöntem, bir System.Threading.CancellationToken kabul eden bir aşırı yüke sahiptir. Bu yapıyorum budur:

public class Program { 

    private static CancellationTokenSource cancelTokenSource = new System.Threading.CancellationTokenSource(); 

    public static void Main(string[] args) { 

     var host = new WebHostBuilder() 
       .UseKestrel() 
       .UseContentRoot(Directory.GetCurrentDirectory()) 
       .UseIISIntegration() 
       .UseStartup<Startup>() 
       .Build(); 

     host.Run(cancelTokenSource.Token); 
    } 

    public static void Shutdown() { 
     cancelTokenSource.Cancel(); 
    } 
} 

Sonra benim Kontrolör I Program.Shutdown() arayıp uygulama ölür birkaç saniye sonra olabilir. IIS'nin arkasındaysa, başka bir istek otomatik olarak uygulamayı başlatır.

+0

Bu kesinlikle mükemmel, teşekkürler. IIS tarafından barındırıldığı zaman bu işlemekle ilgili olarak, Microsoft.Web.Administration'a bir başvuru eklemekten veya bir IIS geri dönüşümünü kandırmak için web.config dosyasında tinkering yapmaktan çok daha iyidir. –

+3

Küçük güncelleme. .NET Core 2.0'da Run (token) yönteminin artık bana uygun olmadığını buldum. Bunun için aşağıdaki satırı kullandım: .RunAsync (cancellationTokenSource.Token) .GetAwaiter(). GetResult(); – Schwarzie2478

+0

Teşekkürler, güncellemeden beri bunu nasıl yapacağımı merak ediyordum. Bunu bir cevap vermelisin. – Chet

3

NET Core 2

programlı geri dönüşüm için ASP.Net Core 2 siteyi zorlamak isterken bir zaman gelebilir. MVC/WebForms günlerinde bile bu mutlaka tavsiye edilen bir uygulama değildi ama ne yazık ki, bir yolu var. ASP.Net Core 2, birkaç kullanışlı şey yapmanıza olanak tanıyan bir IApplicationLifetime nesnesinin enjekte edilmesine izin verir. İlk olarak, gün içinde Global.asax üzerinden kullanılabilenlere benzer bir şekilde Başlangıç, Kapanış ve Kapatma olaylarını kaydetmenize izin verecektir. Ancak, aynı zamanda siteyi kapatmanıza izin veren bir yöntem (bir hack olmadan!) Ortaya çıkarır. Bunu sitenize enjekte etmeniz, daha sonra basitçe aramanız gerekir. Aşağıda, bir siteyi kapatacak bir rotaya sahip bir denetleyicinin bir örneği verilmiştir.

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Microsoft.AspNetCore.Hosting; 
using Microsoft.AspNetCore.Mvc; 

namespace MySite.Controllers 
{ 
    public class WebServicesController : Controller 
    { 
     private IApplicationLifetime ApplicationLifetime { get; set; } 

     public WebServicesController(IApplicationLifetime appLifetime) 
     { 
      ApplicationLifetime = appLifetime; 
     } 

     public async Task ShutdownSite() 
     { 
      ApplicationLifetime.StopApplication(); 
      return "Done"; 
     } 

    } 
} 

Kaynak: http://www.blakepell.com/asp-net-core-ability-to-restart-your-site-programatically-updated-for-2-0

İlgili konular