[WCF] Асинхронные запросы с использованием Silverlight
От: NoHate  
Дата: 22.03.10 19:31
Оценка:
Добрый день.

Не могу разобраться как правильно работать с WCF-сервисом из Silverlight-клиента.

В клиенте я делаю Add Service Reference и добавляю reference на свой сервис. Генерируется класс доступа к сервису. Т.к. в Silvelight запрещены синхронные запросы, то для каждого метода создается пара: MethodNameAsync() и event MethodNameCompleted.

Для всего приложения я использую (хочу использовать) один общий объект этого класса.

И в этом и заключается проблема.

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

Т.е. следующий код может работать неверно при одновременном (однократном) запуске его из двух мест (может показаться messagebox для чужого запроса).
_myWebService.GetCustomerCompleted += (s, e) => MessageBox.Show(e.Result.Id);
_myWebService.GetCustomer(43);



Сейчас я обошел это тем, что создаю на каждое такое место свой экземпляр класса веб-сервиса. Но мне это совершенно не нравится (класс весьма большой) и хотелось бы использовать синглтон. Можно это как-нибудь сделать?
wcf silverlight
Re: [WCF] Асинхронные запросы с использованием Silverlight
От: alexsoff Россия  
Дата: 23.03.10 05:13
Оценка:
Здравствуйте, NoHate, Вы писали:

NH>Сейчас я обошел это тем, что создаю на каждое такое место свой экземпляр класса веб-сервиса.

В своем проекте на сильверлайт, я не нашел другово способа, поэтому пришлось использовать фабрику, но единственный минус от такого подхода я вижу только в усложнении кода.
Re[2]: [WCF] Асинхронные запросы с использованием Silverligh
От: NoHate  
Дата: 23.03.10 08:14
Оценка:
Здравствуйте, alexsoff, Вы писали:

A>В своем проекте на сильверлайт, я не нашел другово способа, поэтому пришлось использовать фабрику, но единственный минус от такого подхода я вижу только в усложнении кода.


Значит не один я такой. Меня смущает только то, что в данный момент класс занимает 4000 строк и это еще начало проекта. Нужно померить, сколько это все памяти отжирает.
Re[3]: [WCF] Асинхронные запросы с использованием Silverligh
От: NoHate  
Дата: 23.03.10 16:28
Оценка:
Сейчас вдруг вспомнил, что WCF генерирует не пару (метод+событие), а три (2 метода и событие). Причем второй метод аналогичен первому, но имеет еще как-то дополнительный параметр.

Пошел проверить. Оказалось, что дополнительный параметр — UserState. MSDN говорит о нем так:

AsyncCompletedEventArgs.UserState Property
Gets the unique identifier for the asynchronous task.


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


Извиняюсь, буду больше читать документацию
Re: [WCF] Асинхронные запросы с использованием Silverlight
От: Аноним  
Дата: 25.03.10 09:21
Оценка:
Здравствуйте, NoHate, Вы писали:

Синхрогнные запросы можете выполнять обращаясь к js коду на странице и там вызывать синхронный HttWebRequest
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.