2011-01-27 3 views
2

У меня есть приложение, которое вызывает службу WCF на высокой частоте. Приложение начинает работать нормально, а затем через несколько минут каждый звонок начинает генерировать эту ошибку:Ошибка запроса времени ожидания WCF

System.TimeoutException: канал запроса был отключен, после чего был отправлен запрос после 00:02:00. Увеличьте значение тайм-аута, переданного вызову Запросить или увеличьте значение SendTimeout в Binding.

Я пробовал все, что я могу думать, чтобы обойти эту ошибку, например:

  • Установка несколько ConcurrencyMode на сервисе:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)] public class ListingService : IListingService

  • Настройка более высокие пределы для максимальных одновременных вызовов/сеансов/экземпляров в сервисе web.config:

serviceThrottling maxConcurrentCalls="100000" maxConcurrentSessions="100000" maxConcurrentInstances="100000"

  • Задание более servicepointmanager defaultconnectionlimit на Application_Start на global.asax сервиса:

protected void Application_Start(object sender, EventArgs e) { System.Net.ServicePointManager.DefaultConnectionLimit = 100000; }

  • убедившись, что я закрытия клиентских подключений:

using (var client = new ListingServiceClient()) { client.SaveListing(listing); client.Close(); }

Вот услуги web.config - http://pastebin.com/d9qtZUKN

Однако, я все еще получаю ошибку. Я уверен, что вызов службы не займет много времени. Есть идеи?

+0

Чтобы подтвердить, что вызов wcf на самом деле не так долго, я создал веб-метод, который ничего не делает и называет его несколько раз из тестового примера. Через пару минут он начинает генерировать ошибку таймаута выше. Есть ли ограничение на максимальные соединения, которое я достигаю в IIS 7? – Justin

+0

Существует ограничение на количество подключений, но оно деируется на нескольких ядрах процессора, поэтому у вас другая проблема. Напишите конфигурацию службы и тело метода в этом вопросе. – vorrtex

+0

Добавлена ​​ссылка на код сервиса web.config. Нечего добавлять для тела метода, потому что это пустой метод, т. Е. Public void Test() {} – Justin

ответ

0

Проблема заключалась в том, что тайм-аут db вызвал тайм-аут WCF.

+0

correct, sendTimeout срабатывает, когда конкретный вызов не завершен в заданный интервал времени, поэтому некоторые вызовы застряли в течение 2 минут, вы можете поймать 'TimeoutException', чтобы увидеть больше деталей – sll