Пул приложений IIS 7 - не удается подключиться к службе WCF - PullRequest
1 голос
/ 03 марта 2010

Привет, У меня к следующей проблеме. У меня есть служба WCF, которая работает под IIS7. Приложение подключается к нему, и служба WCF делает несколько запросов к БД. Я заметил в мониторе активности в SQL Server 2005, что после ровно 102 активных соединений пул приложений в IIS7 зависает. После этого я не могу подключиться к моей службе WCF. Тогда только перезапуск IIS7 помогает. Для подключения я использую ChannelFactory, он закрывается после каждого запроса. Я также ввел такой код, чтобы быть уверенным, что канал закрыт:

catch (FaultException)
{
    Factory.Abort();
    return null;
}
catch (CommunicationException)
{
    Factory.Abort();

    return null;
}
catch (TimeoutException)
{
    Factory.Abort();
    return null;
}
catch (Exception ex)
{
    Factory.Abort();
    return null;
}

finally
{
    Factory.Close();
    Factory.Abort();
}

У меня также есть следующий бевавиор для моего класса обслуживания:

[ServiceBehavior(InstanceContextMode= InstanceContextMode.Single, ConcurrencyMode=ConcurrencyMode.Multiple, AutomaticSessionShutdown=true)]

В моем файле web.config службы также есть следующее:

<serviceBehaviors>
<behavior name="Server.Service1Behavior">
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>

      <serviceThrottling maxConcurrentCalls="2147483647"
        maxConcurrentSessions="2147483647"
        maxConcurrentInstances="2147483647" />

Я попробовал все. Пожалуйста, помогите мне, потому что пользователь не может так работать. Почему так происходит, что после 102 подключений к пулу приложений БД зависает? Вот код, который вызывает в базе данных

internal SqlConnection CheckIfConnectionOpen()
    {
        if (_Connection.State != ConnectionState.Open)
        {
            _Connection.Open();
        }
        return _Connection;
    }
using (SqlCommand cmd = new SqlCommand(query, _Connection))
    { 
CheckIfConnectionOpen();
//some parameters for sqlcommand here and execute nonQuery or execute reader
}

Может кто-нибудь помочь мне с этим, потому что я все еще ищу решение

Ответы [ 3 ]

1 голос
/ 03 марта 2010

В долгосрочной перспективе ссылка ниже объясняет ситуацию, при которой происходит сбой пула приложений, который не перезапускается. Если вы можете перезапустить его, это уменьшит серьезность проблемы.

http://i.nconspicuo.us/2008/06/25/iis7-on-windows-server-2008-503-service-unavailable-error-application-pool-stops-unexpectedly/

Вы упомянули, что проверили, что канал закрыт, возможно, было бы неплохо убедиться, что соединения с БД также закрыты.

Надеюсь, это поможет!

0 голосов
/ 03 марта 2010

Кроме того, ваш код выше эквивалентен:

catch (Exception ex)
{
    Factory.Abort();
    return null;
}
finally
{
    Factory.Close();
    Factory.Abort();
}

И это так же плохо. Вы, вероятно, хотите где-то зарегистрировать исключение, чтобы знать, что произошло.

Я бы хотел увидеть код, который вызывает базу данных. Я был бы обеспокоен, что вы, возможно, не убираете должным образом.

0 голосов
/ 03 марта 2010

Вы можете настроить веб-ферму (несколько процессов для одного и того же IIS), которая поможет минимизировать проблему и зависеть от одного процесса меньше (если один из них умирает и перезапускается, другие могут быть там, чтобы удержать крепость до он перезапускается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...