Соединение у клиентской базы зависает приложение
В моем приложении мне нужно подключиться к клиентской базе данных (SqlServer) только для того, чтобы посмотреть, сможем ли мы подключиться. Это мои строки подключения из web.config (значения не такие, я изменил ip, user и pwd)
<add name="ConnectionStringLibracom" connectionString="Data Source=192.168.1.45\SqlServer2008;Initial Catalog=xxx;user=xxx;pwd=xxx;Application Name=MES"
providerName="System.Data.SqlClient" /> (MINE)
<add name="ConnectionStringMigplus" connectionString="Data Source=999.99.999.99;Initial Catalog=xxx;user=xxx;pwd=xxx"
providerName="System.Data.SqlClient" /> (CLIENT)
но этот фрагмент кода зависает во всем приложении (когда я говорю, что оно зависает, я имею в виду, что оно не позволяет моему приложению подключаться к нашей БД). Я выполняю его в Default.aspx при событии Load:
protected void Page_Load(object sender, EventArgs e)
{
if (!TestaIntegracaoErpMigplus())
{
lblMensagemIntegracao.Visible = true;
Session["Integracao"] = false;
}
else
Session["Integracao"] = true;
}
protected static bool TestaIntegracaoErpMigplus()
{
string connectionStringMigplus = WebConfigurationManager.ConnectionStrings["ConnectionStringMigplus"].ConnectionString;
bool ret = false;
using (SqlConnection Conn = new SqlConnection(connectionStringMigplus))
{
try
{
Conn.Open();
if (Conn.State == ConnectionState.Open)
{
ret = true;
}
}
catch (SqlException)
{
ret = false;
}
}
return ret;
}
@ EDIT: проблема не в том, могу ли я подключиться к серверу или нет, проблема в том, что когда я пытаюсь подключиться к этой базе данных, мой сайт asp.net зависает от новых запросов на странице других пользователей.
2 ответа
Вам не нужно проверять ConnectionState
Если соединение не может быть открыто, возникает исключение
Может быть, эта проверка вызывает вашу проблему
protected static bool TestaIntegracaoErpMigplus()
{
bool ret = true;
try
{
string connectionStringMigplus = WebConfigurationManager.ConnectionStrings["ConnectionStringMigplus"].ConnectionString;
using (SqlConnection Conn = new SqlConnection(connectionStringMigplus))
{
Conn.Open();
}
}
catch (Exception)
{
ret = false;
}
return ret;
}
-------------ОБНОВИТЬ------------------
Попробуйте уменьшить время ожидания подключения в строке подключения:
<add name="ConnectionStringMigplus" connectionString="Data Source=999.99.999.99;Initial Catalog=xxx;user=xxx;pwd=xxx;Connection Timeout=5" providerName="System.Data.SqlClient" />
Вы можете попробовать переместить соединение в Task и использовать функцию Wait с timeout, что-то вроде этого
protected static bool TestaIntegracaoErpMigplus()
{
string connectionStringMigplus = WebConfigurationManager.ConnectionStrings["ConnectionStringMigplus"].ConnectionString;
var task = Task.Factory.StartNew<bool>(()=>{
bool ret = true;
using (SqlConnection Conn = new SqlConnection(connectionStringMigplus))
{
try
{
Conn.Open();
}
catch (SqlException)
{
ret = false;
}
}
return ret;
});
if(task.Wait(/*your timeout in milliseconds*/)){
return task.Result;
}
return false;
}