全部产品
云市场

Windows下IIS+.net framework+Mysql接入实践

更新时间:2019-04-29 10:53:19

本章介绍如何在Windows系统下,使用Docker For Windows打包Asp.Net应用镜像,并使用自研镜像初始化第三方MySQL数据库部署并运行应用。

准备工作

1、环境准备

以下的说明都是基于Docker For Windows下打包并运行,请确保Docker运行在Windows Container模式下,设置方法:在系统任务栏找到Docker图标并右键,打开设置对话框:
image.png

注意:本例子并不适用通过Virtualbox在Widows下运行Docker应用。另外,Docker For Windows需要运行在Win10 64bit(专业版或企业版),并确保更新到1809或以上版本。目前Iot平台暂不支持在Windows Server系统打包生成的镜像。

2、准备数据库初始化文件


创建用于数据库初始化的sql文件,在文件中写入数据库表的创建等相关初始化脚本,可以从现有的数据库中直接导出初始化sql脚本文件来使用。脚本示例如下:

  1. /******************************************/
  2. /* 创建user数据表,并插入两条初始化数据 */
  3. /******************************************/
  4. CREATE TABLE IF NOT EXISTS `user` (
  5. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  6. `gmt_create` datetime NOT NULL COMMENT '创建时间',
  7. `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  8. `name` varchar(256) NOT NULL COMMENT 'name',
  9. `phone` varchar(64) NOT NULL DEFAULT '' COMMENT 'phone',
  10. PRIMARY KEY (`id`)
  11. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE utf8_general_ci COMMENT='用户表';
  12. 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');
  13. 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文件

  1. FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019
  2. Copy aspnetdemo /inetpub/wwwroot
  3. #增加最大内存限制

使用微软官方的aspnet:4.7.2镜像作为基础镜像,该镜像包含:

  • Windows Server Core
  • IIS 10
  • .NET Framework (支持.Net框架多个版本,最高支持4.7.2)
  • 对 IIS 在 .NET 方面的扩展

4、约定mysql服务器配置

为了方便起见,我们约定mysql服务器节点相关的配置如下:

  1. 服务名称:mysqldbsvc
  2. 数据库:mysqlhadb
  3. 用户名:root
  4. 密码:123456Aa


这些配置信息可根据实际情况进行调整。稍后在配置托管应用将会用到。另外,当我们在阿里云物联网托管平台部署成功后,这些配置信息会以环境变量的方式注入到我们的Demo应用运行环境内。所以,Demo的数据库连接字符串可以这样写:

  1. using System;
  2. using System.Data;
  3. using MySql.Data.MySqlClient;
  4. namespace aspnetDemo.Extensions
  5. {
  6. public class DbHelper
  7. {
  8. public static string strConn = string.Empty;
  9. static DbHelper()
  10. {
  11. string uid = Environment.GetEnvironmentVariable("IOT_HOSTING_MYSQLDBSVC_MYSQLUSER");
  12. string pwd = Environment.GetEnvironmentVariable("IOT_HOSTING_MYSQLDBSVC_MYSQLPASSWORD");
  13. string server = Environment.GetEnvironmentVariable("MYSQLDBSVC_SERVICE_HOST");
  14. string database = Environment.GetEnvironmentVariable("IOT.HOSTING.MYSQLDBSVC.MYSQLDATABASE");
  15. string port = Environment.GetEnvironmentVariable("MYSQLDBSVC_SERVICE_PORT_YKMDBSERVICE");
  16. strConn = $"server={server};port={port};user={uid};password={pwd}; database={database};";
  17. }
  18. public static DataTable GetTable(string strSQL, MySqlParameter[] pas, CommandType cmdtype)
  19. {
  20. DataTable dt = new DataTable(); ;
  21. using (var conn = new MySqlConnection(strConn))
  22. {
  23. var da = new MySqlDataAdapter(strSQL, conn);
  24. da.SelectCommand.CommandType = cmdtype;
  25. if (pas != null)
  26. {
  27. da.SelectCommand.Parameters.AddRange(pas);
  28. }
  29. da.Fill(dt);
  30. }
  31. return dt;
  32. }
  33. public static int ExcuteSQL(string strSQL, MySqlParameter[] paras)
  34. {
  35. return ExcuteSQL(strSQL, paras, CommandType.Text);
  36. }
  37. public static int ExcuteSQL(string strSQL, MySqlParameter[] paras, CommandType cmdType)
  38. {
  39. int i = 0;
  40. using (var conn = new MySqlConnection(strConn))
  41. {
  42. var cmd = new MySqlCommand(strSQL, conn);
  43. cmd.CommandType = cmdType;
  44. if (paras != null)
  45. {
  46. cmd.Parameters.AddRange(paras);
  47. }
  48. conn.Open();
  49. i = cmd.ExecuteNonQuery();
  50. conn.Close();
  51. }
  52. return i;
  53. }
  54. }
  55. }

5、发布Demo应用

以文件夹方式发布asp.net mvc应用(基于4.5 .Net Framework)
image.png

镜像打包

将以上准备好的Dockerfile文件与Demo应用放到同一目录下:
image.jpng
使用docker build -t aspnetdemo:v1.0.0 . 命令进行镜像打包。打包成功后如下图:
image.png

镜像上传

请参照镜像仓库,第5小节,或者登陆物联网平台后在镜像管理,镜像列表中点击查看,也可以看到镜像上传相关方法。

镜像部署

登陆到阿里云物联网平台,在左边菜单栏中找到应用托管 -> 应用配置并打开。然后点击右上角的使用镜像创建配置填写好相关配置信息:
image.png
配置创建后,在配置列表中点击编辑进入相关节点配置页面,依次拖动MysqlHA节点、Mysql初始化节点与自研节点各一个到右边的画布,填写好每个节点的相关配置并连线,详细配置如下:

1、Mysql服务器节点配置

这里按照之前约定的Mysql服务器配置信息进行填写。
image.png

2、Mysql服务器初始化节点配置

在数据库的初始化需要较长时间或初始化需要写入大量数据情况下,把数据库相关的初始化工作放到Mysql初始化节点中是最佳实践。现在只需要把上面准备好的数据库初始化sql脚本文件上传至该节点中,当应用部署实例时就会执行该脚本文件,注意数据库相关配置信息要与MysqlHA节点配置保存一致。见下图:
image.png

3、自研节点配置

自研节点是运行我们Demo应用的节点,镜像版本选择刚打包上传的版本1.0.0。注意限制应用的内存使用,避免因内存不足导致节点重启或发生错误。
image.png
注意配置应用端口与外网的端口映射对,Demo应用使用的是端口80(IIS默认端口),外部端口可根据实际情况填写。把外网处勾选上,不然外网将无法访问Demo应用。
image.png
请仔细核对各个配置信息是否填写正确,以免导致稍后部署运行失败。

4、部署并运行

在左侧菜单栏中打开应用管理,选择之前的配置进行部署,等待部署成功后,点击应用列表中进入管理页面,点击打开临时域名链接就可以查看部署的Demo应用了,见下图:
image.png

Demo下载

Aspnet+Mysql