Как отобразить вызовы Silverlight WCF BeginXXXX и EndXXXX - PullRequest
3 голосов
/ 11 августа 2011

Я узнал о RX и Silverlight и нашел сообщение в блоге, показывающее, как реализовать wcf-сервис silverlight с использованием Observable.FromAsyncPattern в Rx.В этом блоге есть заметка для разработчиков Silverlight ...

Важное примечание для Silverlight!
Сгенерированный веб-сервисом Silverlight код клиента делает что-тонемного раздражает - он скрывает вызовы BeginXXXX / EndXXXX, предположительно, чтобы сделать Intellisense чище.Однако они не исчезли, и вы можете получить их обратно, приведя объект MyCoolServiceClient к его базовому интерфейсу (т. Е. Объект LanguageServiceClient имеет сгенерированный реализуемый им интерфейс ILanguageServiceClient)

См. Весь пост в блоге здесь

Хотя я вижу, что методы BeginXXX и EndXXX определенно скрыты для моего сервиса, я не уверен в том, что он имеет в виду, когда говорит, что вам нужно разыгратьServiceClient к интерфейсу.

Если бы я сгенерировал инстанс Service1Client, например,

    Service1Client scClient = new Service1Client();

Как бы я его разыграл?Я пытался ...

((IService1Client) scClient)

Но безрезультатно ... любые предложения очень ценятся.

Ответы [ 2 ]

2 голосов
/ 11 августа 2011

Вы обнаружите, что есть интерфейс, который просто имеет имя Service1 и что Service1Client реализует этот интерфейс.Да, я знаю, что это странно, но нет синтаксического правила, которое бы гласило, что все типы интерфейсов начинаются с буквы «I».Поэтому измените свой код на: -

 Service1 scClient = new Service1Client();

Затем работайте с Service1, который имеет более простой асинхронный шаблон Begin / End.Просто будьте осторожны, потому что обратный вызов, переданный Begin, не будет выполняться в потоке пользовательского интерфейса.

1 голос
/ 11 августа 2011

Это означает, что сгенерированный код включает в себя типы, которые явно реализуют интерфейсы.Есть много причин для этого;Я не уверен, какие здесь архитектурные соображения, поскольку я никогда не делал то, что вы делаете.

Вам следует проверить свой Service1Client, чтобы убедиться, что он реализует сгенерированный интерфейс, содержащий эти методы Begin / End,Если это так, означает, что - это интерфейс, к которому необходимо привести тип клиента службы.Если нет, то, возможно, все изменилось с прошлого года.

...