Аинхронные вызовы веб-сервера в Silverlight и максимальное HTTP-соединение - PullRequest
3 голосов
/ 23 октября 2008

Я читал, что Silverlight 2.0 навязывает асинхронную модель при взаимодействии с веб-сервером. У меня не было возможности экспериментировать с Silverlight, но я предполагаю, что он использует пул потоков для управления потоками, как в .NET Framework.

Теперь, поскольку некоторые браузеры, особенно Internet Explorer, имеют жестко запрограммированное ограничение не более двух одновременных HTTP-подключений, которые могут быть установлены на веб-сервере, что произойдет, если я сделаю несколько асинхронных запросов из Silverlight?
< br /> Обходит ли Silverlight это ограничение в веб-браузере и открывает столько HTTP-соединений, сколько доступно потоков, или асинхронные запросы выстраиваются в очередь и ждут, пока одно из двух соединений станет доступным?

Ответы [ 5 ]

3 голосов
/ 28 октября 2008

В IE (не проверял других) Silverlight ограничен 2-мя подключениями одновременно.

Поведение в Silverlight просто не делает запрос. Таким образом, если вы сделаете 5 запросов асинхронных веб-сервисов подряд, первые 2 будут выполнены, остальные три - нет. Не исключение, которое я видел ...

Fiddler - большая помощь здесь:)

2 голосов
/ 24 декабря 2008

Создайте интерфейс менеджера сообщений для вашего клиента. Любые исходящие запросы отправляются в очередь, которую обрабатывает этот менеджер. Он будет последовательно обрабатывать сообщения из очереди (т. Е. Когда вызывается обратный вызов последнего сообщения, отправленного на сервер, он может затем безопасно перейти к обработке следующего сообщения из очереди).

Вы можете использовать другой ресурс соединения, оставив соединение Comet открытым для сервера. Сервер будет передавать любые возвратные сообщения клиенту через это соединение Comet. Вам нужно будет пометить исходящие сообщения уникальным номером, который может быть встроен в качестве свойства входящих сообщений, чтобы результаты можно было сопоставить с запросом. Менеджер обмена сообщениями отправит сообщение о результате соответствующему обработчику для этого результата.

По сути, вы используете два ресурса соединения для установления двунаправленного обмена сообщениями. Но не существует искусственного ограничения на количество запрашивающих на клиенте (хотя запрос будет последовательно передаваться на сервер). Однако процесс отправки всегда выполняется быстро, потому что вы не ждете, пока будет вычислен какой-либо результат - вам просто нужно надежно доставить сообщение на сервер и вернуться. Результаты возвращаются асинхронно на другом соединении Comet.

Мы делаем что-то в этом направлении с нашими клиентскими приложениями Flex в сочетании с Adobe BlazeDS, работающими на нашем веб-сервере Tomcat:

Асинхронный стек на основе Flex

1 голос
/ 16 декабря 2008

Firefox также ограничен двумя подключениями, в дополнение к IE, как уже говорилось.

Обратите внимание, что ограничение на имя хоста.

Если вы добавляете записи в ваш файл hosts или используете псевдонимы dns, вы можете получить больше соединений. Например, при тестировании добавьте строки типа «127.0.0.1 test1» в файл hosts, и затем вы можете открыть два соединения для http://localhost и еще два для http://test1

0 голосов
/ 23 октября 2008

Во-первых, файл Machine.config не будет использоваться, поскольку элемент управления Silverlight помещен в изолированную программную среду с собственной версией CoreCLR.

Я считаю, что элемент управления Silverlight фактически использует базовый браузер для выполнения асинхронных HTTP-запросов. Скорее всего, это тот случай, когда элемент управления Silverlight не может получить доступ к информации о сбоях SOAP, поскольку спецификация SOAP требует, чтобы сервер возвращал код ответа HTTP 500, а элемент управления Silverlight не получает его от браузера, в котором размещен элемент управления.

Этот пост здесь служит для подтверждения этого.

Что касается ограничения числа одновременных HTTP-подключений, я полагаю, что IE5 и более поздние версии ограничивают количество подключений к одному и тому же сайту на основе версии протокола HTTP - HTTP / 1.0 ограничивается 4 подключениями, а HTTP / 1.1 - 3 подключениями. Большую часть времени веб-сервер будет ограничивать количество подключений до 2 на клиента, ставя в очередь или отбрасывая оставшуюся часть.

0 голосов
/ 23 октября 2008

Я полагаю, что, будучи приложением .NET, Silverlight 2 не зависит от ограничения браузера.
Я бы предположил, что это maxconnection атрибут в Machine.config , как упомянуто в http://support.microsoft.com/kb/828219

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