您的位置:首页 > 其它

Working with Multiple Environments(使用多个环境)

2016-03-03 22:31 330 查看
Working with Multiple Environments

ASP.NET 5提高了跨多环境控制应用程序行为的支持。比如:开发,过度,生产。环境变量用来表明应用程序运行的环境,允许适当配置应用程序。

In this article(在这篇文章中主要介绍的章节如下):

• Development, Staging, Production

• Determining the environment at runtime

• Startup conventions Browse or download samples on GitHub.

Development, Staging, Production

ASP.NET 5引用特定的环境变量。ASPNET_ENV(or Hosting:Environment)描述了当前正在运行的应用程序的环境。这个变量可以设置任何值,但是按照惯例使用三个值,分别为:Development, Staging, and Production。您将发现这些值用于ASP.NET 5提高那个的样品和模板中。

当前环境设置能从ASP.NET 5检测到所使用的编程方式,此外,ASP.NET MVC6介绍了Environment Tag Helper,Environment Tag Helper允许MVC视图包括基于当前应用程序环境的某些部分。

Development

下面是开发应用程序时使用的环境。用Visual Studio 2015时,在项目的调试配置文件中指定环境设置,比如IIS Express,如下图所示:



当修改已创建项目的默认设置,更改在Properties文件夹中的launchSettings.json中被持久化, 包括用到的任何环境变量。在Web配置文件改变 ASPNET_ENV (or Hosting:Environment) 变量为Staging之后,launchSettings.json文件如下所示:

{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:40088/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNET_ENV": "Development"
}
},
"web": {
"commandName": "web",
"environmentVariables": {
"Hosting:Environment": "Staging"
}
}
}
}


   Staging环境是预生产环境,在生产环境之前用来最终测试,理想的情况是,它的物理特性能反应项目产品 ,以至于任何问题在Staging环境中第一次出现时就能解决而不影响客户的使用。

Production(产品)

应用程序运行并被用户使用的环境是Procuction环境。这个环境应该被配置最大的安全性,性能和应用程序的健壮性,production环境中可能有的一些公共设置和开发时有所不同,包括以下。

Turn on caching

Ensure all client-side resources are bundled, minified, and potentially served from a CDN

Turn off diagnostic ErrorPages

Turn on friendly error pages
Enable production logging and monitoring (for example, Application Insights)

这不是一个完整的列表,最好避免在应用程序的很多部分进行分散环境检查。相反,推荐的方法是尽量在应用程序的Startup类(cs)中执行这种检查。

Determining the environment at runtime(在运行时决定使用环境)

为了正常工作,IHostingEnvironment服务提供了带有环境的核心抽象概念,ASP.NET hosting层提供了该服务并且通过依赖注入将这个服务注入到启动逻辑中。Visual Studio中的ASP.NET 5 网站模板用这种方法加载特定环境的配置文件(if present),并自定义应用程序的错误处理设置。在这2种情况下,目前指定环境通过调用 EnvironmentName 或者IsEnvironment 将IHostingEnvironment 的实例传递给适当的方法来实现这种行为的。

如果需要检查在特定的环境中,应用程序是否运行,用env.IsEnvironment("environmentname") ,它能正确地忽略大小写。

例如,可以使用以下代码在Configure方法中设置环境的具体错误操作:

if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}


   如果应用程序在开发环境中正常运行,它可能BrowserLink ,开发特定的错误页,否则,配置一个标准的错误页作为对任何未处理异常的响应显示出来。

Startup conventions(启动约定)

ASP.NET 5支持基于协议的方法在当前环境中配置应用程序的启动。也可以根据环境通过编程的方式控制应用程序的执行,并允许创建和管理自己的协议。

当ASP.NET应用程序启动时,启动类启动应用程序,加载配置设置等(到ASP.NET startup了解更多)。然而,如果存在名为Startup{EnvironmentName}的类,(比如StartupDevelopment),ASPNET_ENV环境变量和这个名相匹配,使用启动类。开发时可以配置启动项,当应用程序在Production的环境中运行,将使用一个单独的StartupProduction。反之亦然。

当应用程序在Development环境中被设置成运行,以下示例项目中的StartupDevelopment将运行。

在开发期间,运行应用程序,显示欢迎屏幕,示例还包括一个StartupStaging类:

当ASPNET_ENV设置成Staging,并且应用程序运行,使用StartupStaging类,应用程序将显示字符串声明,并运行在staging 环境中。当环境没有设置成Development或者是Staging时,会运行应用程序默认的Startup类。(据推测,设置为Production,而不是仅限于这三个选项。还要注意,如果没有环境设置,运行默认启动)。

除了在当前环境下使用完全独立的Startup类,也可以重新在Startup类中配置应用。Configure[Environment]() 和 Configure[Environment]Services()中的Configure()和ConfigureServices()方法支持特定环境的版本,和Startup类本身类似。如果定义了ConfigureDevelopment方法,当环境设置为development时,它将被调用,而不是调用Configure(),同样,在同样的环境中ConfigureDevelopmentServices()方法将被调用,而不是ConfigureServices()方法。

using Microsoft.AspNet.Builder;
namespace Environments
{
public class StartupDevelopment
{
public void Configure(IApplicationBuilder app)
{
app.UseWelcomePage();
}
}
}


  

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

namespace Environments
{
public class StartupStaging
{
public void Configure(IApplicationBuilder app)
{
app.Run(async context =>
{
context.Response.ContentType = "text/plain";
await context.Response.WriteAsync("Staging environment.");
});
}
}
}


   总结

ASP.NET 5提供类很多特性和协议,允许开发人员在不同的环境中控制应用程序如何执行。当发布应用程序从development到staging到production。环境变量设置适当的环境,允许对应用程序调试,测试或者使用进行优化。

更多资源

Configuration
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: