Silverlight связь между клиентом и сервером - PullRequest
0 голосов
/ 12 октября 2010

Извините, я не могу опубликовать код, но вот что происходит в деталях.

Пользователь открывает форму он добавляет прослушиватель событий, например:

GP.GlobalInfo.CommWCF.serviceClient.GetFilteredMessageCompleted += new EventHandler<GetFilteredMessageCompletedEventArgs>(serviceClient_GetFilteredMessageCompleted);

, а затем отправляет асинхронное сообщение на сервер для получения необходимых данных из базы данных. в то же время форма добавляет другого прослушивателя событий, а затем отправляет другое сообщение:

GP.GlobalInfo.CommWCF.serviceClient.GetFilteredMessageCompleted += new EventHandler<GetFilteredMessageCompletedEventArgs>(serviceClient_GetFilteredMessageCompletedAnother);

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

Кажется, не работает, как я ожидаю. как-то сообщения застревают где-то. Итак, я хотел бы знать, если мой подход неверен.


В другом случае , на экране есть пять объектов, на которые я могу нажать. Эти пять объектов будут использовать один и тот же класс для создания. нажатие на объект приводит к форме с соответствующими данными. если я щелкну первый объект, форма добавит прослушиватель событий и отправит сообщение на сервер. пока форма ожидает данные, я закрываю форму, а затем открываю другую форму, щелкая другой объект. Новая форма добавит прослушиватель событий и отправит новое сообщение на сервер.

Между тем сервер обрабатывает первое сообщение формы и возвращает результат во вторую форму, а не в первую (это было закрыто).

это то, что я испытываю сейчас. Кто-нибудь может дать мне какое-то решение как можно скорее для лучшего поведения и понимания silverlight и WCF. Я думаю, что я должен отправить сообщение об остановке на сервер или что-то ..

------- старый вопрос ----------

Привет У меня, кажется, есть некоторые проблемы со связью между клиентом и сервером.

при открытии формы открываются три слушателя. Каждый слушатель получает необходимые данные.

Я думаю (не уверен), что silverlight застревает, когда он общается с использованием этих трех слушателей одновременно.

Так, я должен использовать только одного слушателя, работающего в одно и то же время, всегда в серебряном свете? ну как,

клиент запрашивает данные с сервера
клиент запрашивает данные B с сервера клиент сохраняет данные C на сервере

эти вещи не могут быть сделаны одновременно? Всегда ли я проверяю единый процесс связи между клиентом и сервером?

Спасибо

1 Ответ

0 голосов
/ 13 октября 2010

Проблема в том, что обработчик событий просто сообщает "когда такая операция завершена, позвоните мне" . Обработчик событий не связан с конкретным вызовом, но относится к виду операции.

Если вы вызываете одну и ту же операцию дважды, вы не можете присоединить два обработчика событий и ожидать, что каждый вызов вызывает соответствующий обработчик. Происходит следующее: после завершения операции будет вызван каждый обработчик, связанный с этой операцией.

Вы можете решить свою проблему следующим образом :

  • прикрепить отдельный обработчик событий для каждой конкретной операции
  • когда вы вызываете yourOperation_Async (), вы можете передать идентификатор как userState (последний параметр)
  • внутри обработчика событий вы действуете в соответствии с идентификатором (вы можете получить его из yourOperationCompledEventArgs.UserState), например. обновление правильной формы.

Пример:

...
serviceClient.YourOperationAsync(formName);
...

void serviceClient_YourOperationCompleted(object sender, YourOperationCompletedEventArgs e)
{
    if (e.UserState != null && e.UserState is string)
    {
       string formToUpdate = (string)e.UserState;
       ...
       ... update formToUpdate ...
       ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...