net6项目遇到的一些问题
1添加redis时,在控制台程序可以运行,而在webapi无法运行,同样代码在家里电脑可以
1.1可能是网络设置的问题
1.2 连接不到虚拟机时,需要修改redis.conf
bind 127.0.0.1 只能本机访问 修改成本身ip地址或者全部放开bind 0.0.0.0
1.3 ServiceStack.Redis 是商业版,免费版有限制;
StackExchange.Redis 是免费版,但是内核在 .NETCore 运行有问题经常 Timeout,暂无法解决;
CSRedis于2016年开始支持.NETCore一直迭代至今,实现了低门槛、高性能,和分区高级玩法的.NETCore redis-cli SDK;
2获取appsetting的值
2.1 builder.Configuration["Redis:Host"];
2.2 builder.Configuration.GetSection("Redis:Host").Value
2.3 获取ConnectionStrings的值 builder.Configuration.GetConnectionString("Conn"); 也可以Configuration["ConnectionStrings:Conn"];
在linux中安装net6 ubutu16
1.安装 .NET 之前,请运行以下命令,将 Microsoft 包签名密钥添加到受信任密钥列表,并添加包存储库
wget https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb
2.安装 .NET SDK
sudo apt-get update; \ sudo apt-get install -y apt-transport-https && \ sudo apt-get update && \ sudo apt-get install -y dotnet-sdk-6.0
3.安装 ASP.NET Core 运行时
sudo apt-get update; \ sudo apt-get install -y apt-transport-https && \ sudo apt-get update && \ sudo apt-get install -y aspnetcore-runtime-6.0
原生的sql语句在win可以正常运行,在linux不能,可能的原因
1.创建表的时候,时间没有设置默认值或者设置为null
2 在执行sql语句时,时间要格式化
3 sql要以分号结尾
使用虚拟机NAT网络后,局域网内其他人无法访问虚拟机中服务的解决
- 本地win电脑,socket服务放置在本地电脑虚拟机中,并开启了NAT网络模式
- 本地win下,直接访问虚拟机NAT模式下的ip没有问题,但其他局域网中的用户不能直接这么访问;(可以这么理解,虚拟机nat模式下的网络处于本地下的子网了,同本地的网络主机并不能直接去访问这个子网,因为不在一个网段
-
使用事务 BeginTransaction(此方法用来批量执行一组命令,一个命令错误就会全部回滚,防止误提交问题)在using()中新建的对象,会在{}结束的时候自动关闭和释放,不需要手动进行,这样不用每次都要去调用conn.Close()或者conn.Dispose(),这样能减少人为引入bug的机会
using (MySqlConnection conn = new MySqlConnection(connStr())) { //开启一个事务 using (MySqlTransaction tran = conn.BeginTransaction(IsolationLevel.Serializable)) { try { conn.Open(); MySqlCommand cmd = conn.CreateCommand(); cmd.Transaction = tran; //设置要执行的事务 //定义要执行的操作 cmd.CommandText = " 执行的sql语句"; MySqlParameter[] pares ={ new MySqlParameter(), new MySqlParameter("@name","李四") }; cmd.Parameters.AddRange(pares); cmd.ExecuteScalar(); cmd.Parameters.Clear(); //清空命令集合 //执行下一个命令 cmd.CommandText = " 执行的sql语句"; cmd.ExecuteScalar(); cmd.Parameters.Clear(); //下一个命令...... tran.Commit();//事务提交 } catch (MySqlException ex) { tran.Rollback();//事务回滚 } } }