WCF Сервис - в режиме вызова | Должен ли я позвонить.Close()?

Мой вопрос имеет некоторую предысторию, но прежде чем я углублюсь в это, вот мой вопрос: мне нужно позвонить clientProxy.Close() когда мой режим экземпляра службы установлен в Per Call и мы используем basicHttpBinding?

За последние 3 дня я прочитал перегруженный объем информации об услугах WCF после того, как столкнулся с проблемой, связанной с тем, что мое производственное приложение иногда получало тайм-ауты (на стороне клиента). Из того, что я придумал, это связано с параллелизмом. Я считаю, что у нас есть ограничение в 10 открытых соединений одновременно. Мы размещаем в IIS - независимо от того, что я добавляю в свой web.config, я не могу заставить его принимать более 10 подключений за раз.

Для теста я написал тестовое приложение, которое выполняет следующие действия при нажатии кнопки:

Button_Click(object sender, RoutedEventArgs e){
     for (int i = 0; i < 11; i++) {
          HandleRequest();
     }
}

private async Task HandleRequest() {
     try{
          var proxy = new clientProxy();
          await proxy.DoWork();
     } 
     catch (Exception e){
          MessageBox.Show(e.Message);
     }
}

По сути, я пытаюсь подражать различным случаям, когда приложения запускают запросы одновременно. Я вижу, что создается 10 экземпляров, а затем, как только соединение становится доступным, обрабатывается последний запрос. Странная часть в том, что я вообще не закрываю соединение. Экземпляр закрывается, когда запрос заканчивается. Если это правда, то какой смысл мне звонить .Close()?

Дополнительная информация: Все это связано с тем, что я отлаживал проблему тайм-аута. В моем приложении WPF на панели инструментов я создаю clientProxy в глобальном масштабе, и просто используйте его по мере необходимости, потому что он будет использоваться много раз в минуту, поэтому закрытие и повторное создание его много раз в минуту кажется неправильным (если я говорю сумасшедшим, дайте мне знать). Я начал копаться в том, что потенциально начинаю закрывать и снова открывать их, как все говорят, пока не обнаружил, что само ограничение соединения, кажется, закрывается, когда запрос завершается независимо от того, звоню ли я .Close() или нет.

0 ответов

Другие вопросы по тегам