Получена ошибка при вставке данных в базу данных SQL из двух конечных точек (веб-API и сайта MVC)

#c# #sql-server #asp.net-mvc #asp.net-web-api

#c# #sql-сервер #asp.net-mvc #asp.net-web-api

Вопрос:

При вставке данных с двух конечных точек WebAPI и сайта MVC возникает ошибка, однако при вставке данных только с сайта, не получающего приведенную ниже ошибку, при вставке API данные после вставки нескольких строк получили ошибку ниже-

Исключение System.Data.Entity.Core.EntityException: сбой базового поставщика при открытии. —> Исключение System.Data.SqlClient.SQLException: истек тайм-аут подключения. Истек период ожидания при попытке использовать подтверждение подтверждения перед входом в систему. Это может быть связано с тем, что не удалось выполнить квитирование перед входом в систему или сервер не смог ответить вовремя. Время, затраченное при попытке подключиться к этому серверу, составило — [Предварительный вход] инициализация = 543; рукопожатие = 22278; —> Система.Исключение ComponentModel.Win32Exception: время ожидания истекло

Ниже приведен код MVC:

     internal int SaveCompaignEmailStatusList(List<CampaignEmailStatu> emailStatusList)
    {
        using (GoonjDataModel db = new GoonjDataModel())
        {
            db.CampaignEmailStatus.AddRange(emailStatusList);
            return db.SaveChanges();
        }

    }
  

И вот код API:

                     string connectionString = ConfigurationManager.ConnectionStrings["Test"].ConnectionString;
                    string messageIdT = json.mail.messageId;
                    foreach (var item in deliveryList)
                    {
                        using (SqlConnection con = new SqlConnection(connectionString))
                        {
                            using (SqlCommand cmd = new SqlCommand())
                            {
                                cmd.Connection = con;
                                cmd.CommandType = CommandType.StoredProcedure;
                                cmd.CommandText = "SP_INSERT_DELIVERY_REPORTS";
                                cmd.Parameters.AddWithValue("@ReportType", item.ReportType);
                                cmd.Parameters.AddWithValue("@Campaign", item.Campaign);
                                cmd.Parameters.AddWithValue("@Email", item.Email);
                                con.Open();
                                cmd.ExecuteNonQuery();
                            }
                        }
                    }

                    using (SqlConnection con = new SqlConnection(connectionString))
                    {
                        using (SqlCommand cmd = new SqlCommand())
                        {
                            cmd.Connection = con;
                            cmd.CommandType = CommandType.StoredProcedure;
                            cmd.CommandText = "SP_UPDATE_CAMPAIGN_EMAIL_STATUS";
                            cmd.Parameters.AddWithValue("@messageid", messageIdT);
                            con.Open();
                            cmd.ExecuteNonQuery();
                        }
                    }
  

Любое решение было бы очень полезным..

Комментарии:

1. Возможно, вы пытаетесь открыть здесь много подключений, и сервер в какой-то момент все еще пытается справиться с этими накладными расходами. Посмотрите на повторное использование соединений с ConnectionPool.

2. Вы используете mysql или sqlserver?

Ответ №1:

В виде исключения это выглядит так, что либо SQL Server исчерпывает весь доступный пул подключений, ЛИБО он съедает все ресурсы сервера до такой степени, что перестает отвечать. Можете ли вы открыть диспетчер задач и посмотреть использование памяти и процессора? когда вы получаете это исключение. Также используйте приведенный ниже запрос, чтобы узнать, сколько активных подключений у вас есть в то время, когда вы получаете исключения.

 SELECT DB_NAME(dbid) AS DBName,
COUNT(dbid) AS NumberOfConnections,
loginame
FROM    sys.sysprocesses
GROUP BY dbid, loginame
ORDER BY DB_NAME(dbid)
  

Используйте следующую ссылку для получения дополнительной информации https://blog.sqlauthority.com/2014/08/24/sql-server-how-to-see-active-sql-server-connections-for-database/