2015-10-27 4 views
0

Я создал универсальное приложение Windows 10 с использованием превосходной библиотеки AsyncEx от MvvmCross и Stephen Cleary.Запросы на обслуживание IIS?

Обновление 27/10/2015 15:43 - Стивен ответил на вопрос. Проверено и проверено правильно.

В представлении я привязываю ListView к свойству в ViewModel, который асинхронно загружает коллекцию моделей пространственного зрения с именем AssignableTaskPlaceholderModel (используя функциональность AsyncEx).

Данные получены из службы веб-API, которую я также создал. Для моей тестовой жгуты коллекция загружается с помощью 12 AssignableTaskPlaceholderViewModel, каждая из которых просто удерживает значение идентификатора.

DataTemplate для элементов ListView затем привязывает элементы к свойству AssignableTaskPlaceholderModel с именем AssignableTaskViewModel. Это асинхронно вызывает другой метод Web API для возврата подробных данных (снова используя функциональность AsyncEx). Этот метод в настоящее время возвращает макет данных.

Когда я запускаю приложение, я бы ожидал увидеть:

1) Начальная загрузка коллекции заполнителя принимает небольшое количество времени, то

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

Что я на самом деле вижу, загружаются подробные данные последовательно i.e похоже, что IIS выполняет очередь запросов, обрабатывая их по одному.

Ниже приведены некоторые данные отладки, которые показывают, что начальные запросы обрабатывались в течение секунды, причем ответы, составляющие от 0 до 4 секунд, завершаются, хотя каждый вызов метода выполняет то же самое.

Мой вопрос: почему это происходит?

Start для задач ID 1050100111000000000034373 в 20/10/2015 15:09:52

Start для Task ID 1050100111000000000034398 в 20/10/2015 15:09:52

Start для задач ID 1050100111000000000034402 в 20/10/2015 15:09:52

Start для задач ID 1050100111000000000034407 в 20/10/2015 15:09:52

Start для Task ID 1050100111000000000034431 на 20/10/2015 15: 0 9:53

Start для задач ID 1050100111000000000034433 в 20/10/2015 15:09:53

Start для Task ID 1050100111000000000034454 в 20/10/2015 15:09:53

Старт для Идентификатор задачи 1050100111000000000034479 на 20/10/2015 15:09:53

Start для Task ID 1050100111000000000034483 в 20/10/2015 15:09:53

Start для Task ID 1050100111000000000034488 на 20/10/2015 15 : 09: 53

Start для Task ID 1050100111000000000034512 в 20/10/2015 15:09:53

End для задач ID 1050100111000000000034373 в 20/10/2015 15:09:53

Start для задач ID 1050100111000000000034514 на 20/10/2015 15:09:53

Конец для задач ID 1050100111000000000034512 в 20/10/2015 15:09:53

End для задач ID 1050100111000000000034514 в 20/10/2015 15:09:53

Конец для задач ID 1050100111000000000034402 на 20/10/2015 15:09:53

End Task для ID 1050100111000000000034407 на 20/10/2015 15:09:54

End для задач ID 1050100111000000000034398 при 20/10/2015 15:09:54

Конец для задач ID 1050100111000000000034483 в 20/10/2015 15:09:55

End для задач ID 1050100111000000000034479 на 20/10/2015 15:09:55

Идентификатор задачи 10501001110 00000000034488 в 20/10/2015 15:09:56

End для задач ID 1050100111000000000034454 в 20/10/2015 15:09:56

End для задач ID 1050100111000000000034433 на 20/10/2015 15:09 : 57

Конца для задач ID 1050100111000000000034431 на 20/10/2015 15:09:57

Если я использую поддельные данные (вместо вызова методов Web API на всех), с намеренно добавленной задержкой Я вижу, что сантехника View/ViewModel/AsyncEx работает нормально.

Подробнее:

1) Я звоню Web API с помощью Windows.Web.Http.HttpClient. Я использую один экземпляр HttpClient для всех вызовов метода Web API (который, я считаю, является наилучшей практикой).

2) Вызов метода Web API не требует аутентификации или HTTPS-соединения.

3) Для HttpBaseProtocolFilter (используется для HTTPClient) Я набор MaxConnectionsPerServer до 100.

4) Проект Web API нацелен на .Net 4.6 (targetFramework = "4.6"). Я считаю, что эта версия .Net не ограничивает количество подключений к серверу, то есть не нужно добавлять это в web.config:.

5) Я использовал Async/Await «весь путь», как в клиентском приложении, так и в методах веб-API.

6) Сессия включена в проекте веб-API.

7) Я запускаю IIS 10 на своем компьютере разработки Win 10.

+0

Было бы лучше поделиться фрагментом репродуцирующего кода, особенно здесь, поскольку он включает в себя клиент и сервер. IIS не ставит в очередь запросы в целом. –

ответ

2

Если включен режим сеанса чтения/записи, то ASP.NET будет сериализовать запросы. ASP.NET делает это независимо от того, являются ли они синхронными или асинхронными.

+0

Спасибо огромное! устранение проблемы с сеансом устраняет проблему. Теперь работаю так, как я ожидал. – Howard

+0

Есть ли где-нибудь, что я мог бы прочитать об этом более подробно? –

+1

@SergRogovtsev: см. [Официальные документы] (https://msdn.microsoft.com/en-us/library/ms178581.aspx), в частности раздел «Параллельные запросы и состояние сеанса». –