none
Падает соединение с базой данных после долгого простоя приложения RRS feed

  • Вопрос

  • Здравствуйте,

    возникла проблема, после старта приложения, которое использует для хранения данных - бд microsoft sql 2005, если приложение не трогать на протяжении длительного времени(приблизительно пол дня), после возобновления работы с ним(и бд), падает ошибка: "A transport level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibility closed by the remote host.)".

    Connection string:  

    <connectionStrings>
        <add name="DataEntities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Application Name='AppName';Data Source='Remote server';Initial Catalog='BaseName';Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>

    Приложение использует .net 3.5 и Entity Framework.

    Возможно это связано с пулам коннектов к бд.

    Буду рад любой помощи, спасибо.

    16 июля 2013 г. 12:16

Ответы

  • Скорее всего истекает таймаут, так соединение достаточно долго остаётся отрытым. Можете установить SqlConnection.ConnectionTimeout в 0, но это не очень хорошая идея. Как правило если соединение не используется долго, лучше его закрывать, а при повторном запросе проверять и открывать снова.

    Сделаем содержимое сообщества лучше, вместе!

    16 июля 2013 г. 12:27
    Модератор
  • Кстати, если вы даже установите ConnectionTimeout в 0, а в сети будут проблемы, то соединение все равно упадет.

    Судя по строке подключения, вы используете Entity Framework. К сожалению, предложение указанное выше, каждый раз создавать контекст не очень эффективно, т.к. у вас уже загружены в контекст данные, а создание контекста, загрузка данных - это все время.

    Можно попробовать раз в 10 минут дергать из одной таблицы 1 строку и будет вам счастье. При отсутствии проблем в сети, приложение будет работать. Ну а упало, будете пользователю показывать сообщение по возвращению: Все плохо, перезапусти меня.

    16 июля 2013 г. 13:15
    Отвечающий

Все ответы

  • Скорее всего истекает таймаут, так соединение достаточно долго остаётся отрытым. Можете установить SqlConnection.ConnectionTimeout в 0, но это не очень хорошая идея. Как правило если соединение не используется долго, лучше его закрывать, а при повторном запросе проверять и открывать снова.

    Сделаем содержимое сообщества лучше, вместе!

    16 июля 2013 г. 12:27
    Модератор
  • Кстати, если вы даже установите ConnectionTimeout в 0, а в сети будут проблемы, то соединение все равно упадет.

    Судя по строке подключения, вы используете Entity Framework. К сожалению, предложение указанное выше, каждый раз создавать контекст не очень эффективно, т.к. у вас уже загружены в контекст данные, а создание контекста, загрузка данных - это все время.

    Можно попробовать раз в 10 минут дергать из одной таблицы 1 строку и будет вам счастье. При отсутствии проблем в сети, приложение будет работать. Ну а упало, будете пользователю показывать сообщение по возвращению: Все плохо, перезапусти меня.

    16 июля 2013 г. 13:15
    Отвечающий