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();//事务回滚
                    }
                }
            }

 





posted @ 2023-02-27 13:44  青兰柳  阅读(108)  评论(0编辑  收藏  举报