Windows下IIS+.net framework+Mysql接入实践
本章介绍如何在Windows系统下,使用Docker For Windows打包Asp.Net应用镜像,并使用自研镜像初始化第三方MySQL数据库部署并运行应用。
准备工作
1、环境准备
以下的说明都是基于Docker For Windows下打包并运行,请确保Docker运行在Windows Container模式下,设置方法:在系统任务栏找到Docker图标并右键,打开设置对话框:
注意:本例子并不适用通过Virtualbox在Widows下运行Docker应用。另外,Docker For Windows需要运行在Win10 64bit(专业版或企业版),并确保更新到1809或以上版本。目前Iot平台暂不支持在Windows Server系统打包生成的镜像。
2、准备数据库初始化文件
创建用于数据库初始化的sql文件,在文件中写入数据库表的创建等相关初始化脚本,可以从现有的数据库中直接导出初始化sql脚本文件来使用。脚本示例如下:
/******************************************/
/* 创建user数据表,并插入两条初始化数据 */
/******************************************/
CREATE TABLE IF NOT EXISTS `user` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`gmt_create` datetime NOT NULL COMMENT '创建时间',
`gmt_modified` datetime NOT NULL COMMENT '修改时间',
`name` varchar(256) NOT NULL COMMENT 'name',
`phone` varchar(64) NOT NULL DEFAULT '' COMMENT 'phone',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE utf8_general_ci COMMENT='用户表';
INSERT INTO `user` (id, gmt_create, gmt_modified, name, phone) VALUES ('1', '2018-11-26 10:00:00', '2018-11-26 10:00:00', '测试', '1388888888');
INSERT INTO `user` (id, gmt_create, gmt_modified, name, phone) VALUES ('2', '2018-11-26 10:00:00', '2018-11-26 10:00:00', 'test', '1366666666');
3、准备Dockerfile文件
FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019
Copy aspnetdemo /inetpub/wwwroot
#增加最大内存限制
使用微软官方的aspnet:4.7.2镜像作为基础镜像,该镜像包含:
Windows Server Core
IIS 10
.NET Framework (支持.Net框架多个版本,最高支持4.7.2)
对 IIS 在 .NET 方面的扩展
4、约定MySQL服务器配置
为了方便起见,我们约定MySQL服务器节点相关的配置如下:
服务名称:mysqldbsvc
数据库:mysqlhadb
用户名:root
密码:123456Aa
这些配置信息可根据实际情况进行调整。稍后在配置托管应用将会用到。另外,当我们在阿里云物联网托管平台部署成功后,这些配置信息会以环境变量的方式注入到我们的Demo应用运行环境内。所以,Demo的数据库连接字符串可以这样写:
using System;
using System.Data;
using MySql.Data.MySqlClient;
namespace aspnetDemo.Extensions
{
public class DbHelper
{
public static string strConn = string.Empty;
static DbHelper()
{
string uid = Environment.GetEnvironmentVariable("IOT_HOSTING_MYSQLDBSVC_MYSQLUSER");
string pwd = Environment.GetEnvironmentVariable("IOT_HOSTING_MYSQLDBSVC_MYSQLPASSWORD");
string server = Environment.GetEnvironmentVariable("MYSQLDBSVC_SERVICE_HOST");
string database = Environment.GetEnvironmentVariable("IOT.HOSTING.MYSQLDBSVC.MYSQLDATABASE");
string port = Environment.GetEnvironmentVariable("MYSQLDBSVC_SERVICE_PORT_YKMDBSERVICE");
strConn = $"server={server};port={port};user={uid};password={pwd}; database={database};";
}
public static DataTable GetTable(string strSQL, MySqlParameter[] pas, CommandType cmdtype)
{
DataTable dt = new DataTable(); ;
using (var conn = new MySqlConnection(strConn))
{
var da = new MySqlDataAdapter(strSQL, conn);
da.SelectCommand.CommandType = cmdtype;
if (pas != null)
{
da.SelectCommand.Parameters.AddRange(pas);
}
da.Fill(dt);
}
return dt;
}
public static int ExcuteSQL(string strSQL, MySqlParameter[] paras)
{
return ExcuteSQL(strSQL, paras, CommandType.Text);
}
public static int ExcuteSQL(string strSQL, MySqlParameter[] paras, CommandType cmdType)
{
int i = 0;
using (var conn = new MySqlConnection(strConn))
{
var cmd = new MySqlCommand(strSQL, conn);
cmd.CommandType = cmdType;
if (paras != null)
{
cmd.Parameters.AddRange(paras);
}
conn.Open();
i = cmd.ExecuteNonQuery();
conn.Close();
}
return i;
}
}
}
5、发布Demo应用
以文件夹方式发布asp.net mvc应用(基于4.5 .Net Framework)
镜像打包
将以上准备好的Dockerfile文件与Demo应用放到同一目录下:使用docker build -t aspnetdemo:v1.0.0 .
命令进行镜像打包。打包成功后如下图:
镜像上传
请参照镜像仓库,第5小节,或者登录物联网平台后在镜像管理
,镜像列表中点击查看
,也可以看到镜像上传相关方法。
镜像部署
登录到阿里云物联网平台,在左边菜单栏中找到
并打开。然后点击右上角的使用镜像创建配置填写好相关配置信息:配置创建后,在配置列表中点击编辑进入相关节点配置页面,依次拖动MysqlHA节点、Mysql初始化节点与自研节点各一个到右边的画布,填写好每个节点的相关配置并连线,详细配置如下:
1、Mysql服务器节点配置
这里按照之前约定的Mysql服务器配置信息进行填写。
2、Mysql服务器初始化节点配置
在数据库的初始化需要较长时间或初始化需要写入大量数据情况下,把数据库相关的初始化工作放到Mysql初始化节点中是最佳实践。现在只需要把上面准备好的数据库初始化sql脚本文件上传至该节点中,当应用部署实例时就会执行该脚本文件,注意数据库相关配置信息要与MysqlHA节点配置保存一致。见下图:
区域①:请仔细核对区域中的这几项配置,注意与mysqldbsvc数据库节点配置保持一致。
区域②:在此处上传数据库sql初始化脚本。
3、自研节点配置
自研节点是运行我们Demo应用的节点,镜像版本选择刚打包上传的版本1.0.0。注意限制应用的内存使用,避免因内存不足导致节点重启或发生错误。注意配置应用端口与外网的端口映射对,Demo应用使用的是端口80(IIS默认端口),外部端口可根据实际情况填写。把外网处勾选上,不然外网将无法访问Demo应用。请仔细核对各个配置信息是否填写正确,以免导致稍后部署运行失败。
4、部署并运行
在左侧菜单栏中打开应用管理,选择之前的配置进行部署,等待部署成功后,点击应用列表中进入管理页面,点击打开临时域名链接就可以查看部署的Demo应用了,见下图: