GET-вызовы сбрасываются с помощью HttpClient - PullRequest
1 голос
/ 09 октября 2011

Я использую HttpClient из выпуска WCF REST Preview, и мы видим некоторую странную функциональность, которую я пытаюсь определить.

То, что происходит, время от времени происходит при создании одного из пяти различных GETвызовы веб-службы RESTful, кажется, что звонок вообще не срабатывает, но код, кажется, думает, что это так.Мы включили отслеживание как на стороне службы, так и на стороне, выполняющей запрос, и не видим исходящих запросов при возникновении этой проблемы.Тем не менее, код ожидает в течение всего периода ожидания и затем выбрасывает время ожидания.Мы запустили сотни тестов и видим это только в вызовах GET, но не в вызовах POST, которые также происходят в нашем процессе.

Что еще интереснее, поскольку Fiddler работает на коробке, выполняющей запрос, мы не можем реплицироватьвопрос вообще.Все запросы проходят нормально каждый раз.

У кого-нибудь есть идеи по поводу того, что может происходить?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Итак, мы реорганизовали наши звонки простоиспользуйте HttpWebRequest / HttpWebResponse и уберите HttpClient из уравнения, но проблемы по-прежнему возникают.Мы добавили явные операторы .Close () к каждому ответу, поэтому, похоже, мы их не закрываем.Это выполняется в асинхронном подключаемом модуле Microsoft CRM, так что я также отмечаю это, на случай, если это проблема с crm.

Ответы [ 2 ]

0 голосов
/ 11 октября 2011

Проблема оказалась в том, что соединения не закрывались, и удаленный сервер ограничивал количество соединений определенным IP-адресом.Оказывается, что код HttpClient создает новое ConnectionGroupName для каждого экземпляра, и мы создавали новое для каждого вызова.Несмотря на то, что мы обернули вызовы в операторы using, соединения не закрылись.

Мы переписали код с использованием HttpWebRequest / HttpWebResponse и явно вызывали .Close () при каждом вызове.Это решило проблему.

Мы предполагаем, что все вызовы работали через Fiddler, потому что он либо закрывал, либо пул соединений для нас

0 голосов
/ 10 октября 2011

Поскольку ваш код выполняется на сервере в асинхронном процессе, возможно, он исчерпывает исходящие TCP-порты на сервере. Это довольно часто, когда у вас есть процесс на стороне сервера, общающийся с другими серверами HTTP.

Вот ссылка, которая немного подробнее описывает проблему и показывает, как обновить реестр на сервере для оптимизации этих настроек.

http://msdn.microsoft.com/en-us/library/ms819739.aspx

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