Ubuntu Server 16.04下ASP.NET Core Web Api + MySql + Dapper在 Jexus、nginx 下的简单测试
一、环境及工具
1、服务器
- VirtualBox5.1.4 安装 Ubuntu Server 16.04 amd64
- MySql Ver 14.14 Distrib 5.6.21
- Jexus 5.8.1
- nginx 1.10.0
- dotnet core 1.0.0-preview2-003121
- supervisor 3.2.1
2、开发环境
- VS2015 + Update 3
- DotNetCore.1.0.0-VS2015Tools.Preview2.0.1.exe
3、测试工具
- HttpTest4Net:http://www.ikende.com/httptest
二、项目及代码
1、mysql 数据访问、ORM
- MySql.Data.Core 7.0.4-IR-191
- Dapper 1.50.2
2、数据库及表
- 数据库:Test
- 数据表:User 两个字段:Id,Name,数据4条
CREATE TABLE `User` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of User -- ---------------------------- INSERT INTO `User` VALUES ('1', 'LXY-1'); INSERT INTO `User` VALUES ('2', 'LXY-2'); INSERT INTO `User` VALUES ('3', 'LXY-3'); INSERT INTO `User` VALUES ('5', 'LXY-5-New');
- 项目,最简单的三层结构,实现增删改查(下载)
如需使用项目,请修改数据库连接字符串,在 appsettings.json 文件里:
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } }, "ConnectionStrings": { "TestDb": "server=192.168.2.117;Port=51889;userid=test8888;password=test8888;database=Test;SslMode=None;" } }
项目使用ASP.NET CORE 自带的依赖注入,没有使用第三方的,Controller代码如下:
[Route("api/[controller]")] public class UserController : Controller { readonly IUserBll _userBll; public UserController(IUserBll userBll) { _userBll = userBll; } [HttpGet] public IEnumerable<User> Get() { return _userBll.GetList(); } [HttpGet("{name}")] public User Get(string name) { return _userBll.Get(name); } [HttpPost] public void Post([FromBody]User user) { if(user == null || string.IsNullOrEmpty(user.Name)) { return; } _userBll.Add(user); } [HttpPut] public void Put([FromBody]User user) { if (user == null || user.Id < 0 || string.IsNullOrEmpty(user.Name)) { return; } _userBll.Update(user); } [HttpDelete("{id}")] public void Delete(int id) { _userBll.Delete(id); } }
三、ASP.NET CORE 在 Ubuntu 的配置
参考大神 savorboard 的博客:http://www.cnblogs.com/savorboard。
四、测试结果
说明:因为使用jexus端口转发模式测试时,Requests:10000 Users:50 KeepAlive:False 的时候,就出现了很多错误连接,所以没有继续测试,不知道是不是我的配置有问题,配置如下:
###################### # Web Site: Default ######################################## port=8080 root=/ /hoem/vsftpd/website/webapitest hosts=* #OR your.com,*.your.com # addr=0.0.0.0 # CheckQuery=false NoLog=true AppHost.Port=5000 # NoFile=/index.aspx # Keep_Alive=false # UseGZIP=false # UseHttps=true # DenyFrom=192.168.0.233, 192.168.1.*, 192.168.2.0/24 # AllowFrom=192.168.*.* # DenyDirs=~/cgi, ~/upfiles # indexes=myindex.aspx # rewrite=^/.+?\.(asp|php|cgi|pl|sh)$ /index.aspx
端口转发测试结果如下:
下面是 nginx 和 jexus 反向代理模式下的测试结果:
1. Requests:10000; Users:50;KeppAlive:False
nginx:
jexus:
2. Requests:10000; Users:50;KeppAlive:True
nginx:
jexus:
3. Requests:10000; Users:200;KeppAlive:False
nginx:
jexus:
4. Requests:10000; Users:200;KeppAlive:True
nginx:
jexus:
5. Requests:10000; Users:500;KeppAlive:False
nginx:
jexus:
6. Requests:10000; Users:500;KeppAlive:True
nginx:
jexus:
7. Requests:10000; Users:100;KeppAlive:False
nginx:
jexus:
8. Requests:10000; Users:1000;KeppAlive:True
nginx:
jexus:
五、总结
- 测试环境非常简陋,测试到1000用户的时候,路由器受不了了,其他应用程序都纷纷离线了,包括QQ。上面结果可能不是非常准确,但是有一定的参考价值。
- 只测试了GET,没有测试POST。
- 感觉ASP.NET CORE 应该慢慢的可以使用到生产环境中了:)。
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- ASP.NET Core Web API下事件驱动型架构的实现(一):一个简单的实现
- LINUX 下Jexus部署ASP.NET Core WebApi
- Asp.NetCoreWebApi图片上传接口(二)集成IdentityServer4授权访问(附源码)
- [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果
- ASP.NET Core的身份认证框架IdentityServer4--(2)API跟WEB端配置
- Asp.net core与golang web简单对比测试
- CentOs7 +Jexus 5.8.2部署Asp.Net Core WebApi 1.0生产环境
- [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了
- 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)
- Asp.net core与golang web简单对比测试
- 使用 Swagger 自动生成 ASP.NET Core Web API 的文档、在线帮助测试文档(ASP.NET Core Web API 自动生成文档)
- 如何在ASP.NET Core Web API测试中使用Postman
- Asp.Net Core WebAPI入门整理(二)简单示例
- ASP.NET Core WebAPI 开发-新建WebAPI项目
- Docker容器环境下ASP.NET Core Web API应用程序的调试
- Docker容器环境下ASP.NET Core Web API应用程序的调试
- Docker容器环境下ASP.NET Core Web API
- 在docker中运行ASP.NET Core Web API应用程序