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()
или нет.