• .NET跨平台之旅:升级至ASP.NET 5 RC1,Linux上访问SQL Server数据库团队


    今天微软正式发布了ASP.NET 5 RC1(详见Announcing ASP.NET 5 Release Candidate 1),.NET跨平台迈出了关键一步。

    紧跟这次RC1的发布,我们成功地将运行在Linux上的示例站点(http://about.cnblogs.com)升级到了ASP.NET 5 RC1,并且增加了数据库访问功能——基于Entity Framework 7 RC1访问SQL Server数据库。

    示例站点页面左侧的导航是从数据库读取数据动态加载的,数据库服务器用的是阿里云RDS(注:创建数据库时需要将支持的字符集设置为SQL_Latin1_General_CP1_CS_AS,这是针对SqlClient中一个bug的临时解决方法)。数据库表是通过EF迁移功能生成的,所用命令如下:

    dnx ef migrations add FirstMigration
    dnx ef database update

    数据库连接字符串是从config.json中读取的。

    后端Web服务器用的是kestrel,前端Web服务器用的是阿里云负载均衡,使用中发现一个很奇怪的问题:浏览器直接访问kestrel,速度飞快;而访问阿里云负载均衡,页面虽然显示出来,但页面一直牌加载状态,长达1分钟。

    怀疑是阿里云负载均衡与kestrel在TCP通信上存在某些问题,这个问题暂时没有找到解决方法(更新:这是kestrel的一个bug,详见 Don't wait to consume the entire request body for Connection: close requests )。

    SQL Server数据库终于能跨平台访问了,接下来就看kestrel的稳定性了。如果kestrel稳定,我们就开始将一些实际使用的小站点迁移至ASP.NET 5,并部署在Linux服务器上。

    下面分享一下这个示例ASP.NET 5站点的主要代码。

    文件结构:

    .
    ├── config.json
    ├── Controllers
    │   ├── AboutController.cs
    │   └── HomeController.cs
    ├── Data
    │   ├── EfDbContext.cs
    │   ├── ITabNavRepository.cs
    │   └── TabNavRepository.cs
    ├── Extensions
    │   └── HtmlHelperExtensions.cs
    ├── Models
    │   └── TabNav.cs
    ├── project.json
    ├── project.lock.json
    ├── Startup.cs
    ├── Views
    │   ├── About
    │   │   ├── Ad.cshtml
    │   │   ├── Contact.cshtml
    │   │   ├── Intro.cshtml
    │   │   └── Job.cshtml
    │   ├── Shared
    │   │   └── _Layout.cshtml
    │   └── _ViewStart.cshtml
    └── wwwroot

    project.json文件的内容:

    {
        "webroot": "wwwroot",
        "exclude": ["wwwroot"],
        "commands":{
            "kestrel": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:8001",
            "ef": "EntityFramework.Commands"
        },
        "dependencies":{
            "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
            "Microsoft.AspNet.Mvc": "6.0.0-*",
            "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
            "Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final",
            "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
            "EntityFramework.Commands": "7.0.0-rc1-final",
            "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
            "System.Runtime.Serialization.Primitives": "4.0.10-*",
            "System.Net.Security":"4.0.0-*"
        },
        "frameworks":{
            "dnxcore50": {},
        }
    }

    Startup.cs中的代码:

    using System;
    using System.Linq;
    using Microsoft.AspNet.Builder;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Data.Entity;
    using CNBlogs.AboutUs.Data;
    using Microsoft.Dnx.Runtime;
    using Microsoft.Extensions.PlatformAbstractions;
    using Microsoft.Extensions.Configuration;
    using System.Data.SqlClient;
    using Microsoft.Extensions.Logging;
    
    namespace CNBlogs.AboutUs.Web
    {
        public class Startup
        {
            public Startup(IApplicationEnvironment appEnv)
            {
                IConfigurationBuilder builder = new ConfigurationBuilder()
                              .SetBasePath(appEnv.ApplicationBasePath)
                              .AddJsonFile("config.json", false);
                Configuration = builder.Build();
            }
    
            public IConfiguration Configuration { get; set; }
    
            public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
            {
                loggerFactory.AddConsole();
                app.UseDeveloperExceptionPage();
                app.UseMvcWithDefaultRoute();
                app.UseStaticFiles();
                app.UseRuntimeInfoPage();
            }
    
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddMvc();
    
                services.AddEntityFramework()
                    .AddSqlServer()
                    .AddDbContext<EfDbContext>(options =>
                    {
                        options.UseSqlServer(Configuration["data:ConnectionString"]);
                    });
    
                services.AddTransient<ITabNavRepository, TabNavRepository>();
            }
        }
    }
  • 相关阅读:
    seo 优化 仅针对 来拍呀www.laipaiya.com(一)
    mac 下 配置 xhprof
    mac 下 sphinx + mysql + php 实现全文搜索(xampp)(4)php api 解析
    mac 下 sphinx + mysql + php 实现全文搜索(xampp)(3)sphinx 的配置项解析
    php + mysql + sphinx 的全文检索(2)
    mac 下 sphinx + mysql + php 实现全文搜索(xampp)(1)
    mysql 的 存储结构(储存引擎)
    [php] yii debug设置
    [mysql] 查看mysql执行时间
    [javascript] 对象拷贝
  • 原文地址:https://www.cnblogs.com/cmt/p/4977436.html
Copyright © 2020-2023  润新知