Запрос OpenRiaServices, очевидно, блокирует другие запросыC#

Место общения программистов C#
Ответить
Anonymous
 Запрос OpenRiaServices, очевидно, блокирует другие запросы

Сообщение Anonymous »

У меня странная проблема с клиент-серверным приложением, использующим OpenRiaServices.
Все работает нормально, если я запускаю клиент и сервер на одном компьютере и использую что-то вроде Fiddler для мониторинга сетевого трафика, когда я запускаю клиент на своем компьютере и подключаюсь к удаленному серверу. Проблема возникает только тогда, когда я запускаю клиент на своем компьютере и подключаюсь напрямую к удаленному серверу.
Ситуация такова, что я делаю два запроса (A и Б) на сервер. Запрос «А» требует дополнительной обработки на сервере и может занять несколько десятков секунд, но не блокирует пользовательский интерфейс. Запрос «B» выполняется намного быстрее, обычно он возвращается через пару секунд, но требует блокировки пользовательского интерфейса.
Что должно произойти (и происходит, когда я отлаживаю), так это :
  • Сделать запрос «А».
  • Сделать запрос «Б», который блокирует пользовательский интерфейс.
  • Запрос «B» возвращается, и пользователь может продолжать работу
  • Запрос «А» возвращается.
На самом деле происходит следующее:
  • Сделать запрос «А».
  • Сделать запрос «Б», который блокирует пользовательский интерфейс.
  • Запрос «А» возвращает. >
  • Запрос «Б» возвращается, и пользователь может продолжать работу
Код запроса «А»:

Код: Выделить всё

private void MakeRequestA()
{
LoadOperation loadOpA = domainContextA.Load(domainContextA.RequestA(), LoadBehaviour.RefreshCurrent, true);
loadOpA.Completed += LoadOpA_Completed;
}

private void LoadOpA_Completed(object sender, EventArgs e)
{
// Process results
}
Код запроса «Б» практически тот же:

Код: Выделить всё

private void MakeRequestB()
{
// Block the UI

LoadOperation loadOpB = domainContextB.Load(domainContextB.RequestB(), LoadBehaviour.RefreshCurrent, true);
loadOpB.Completed += LoadOpB_Completed;
}

private void LoadOpB_Completed(object sender, EventArgs e)
{
// Process results

// Unblock the UI
}
Это не очень удобно для пользователей, и мы предпочитаем, чтобы все происходило в том порядке, в котором оно должно происходить. Как я могу заставить код вести себя самостоятельно?

Подробнее здесь: https://stackoverflow.com/questions/791 ... r-requests
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»