WCF от Silverlight без использования ссылки на службу - PullRequest
2 голосов
/ 09 декабря 2010

Дэвид Бетц описывает в своей статье, как создать ссылку на WCF без использования опции «Добавить ссылку на службу»: http://www.netfxharmonics.com/2008/11/Understanding-WCF-Services-in-Silverlight-2

После создания службы WCF в Silverlight создаются следующие операторы:

  BasicHttpBinding basicHttpBinding = new BasicHttpBinding();
  EndpointAddress endpointAddress = new EndpointAddress("http://localhost:1003/Person.svc");
  IPersonService personService = new ChannelFactory<IPersonService>(basicHttpBinding, endpointAddress).CreateChannel();

...

Как можно ссылаться на типы (такие как интерфейс IPersonService), созданные в WCF из Silverlight, когда я не использую «Добавить ссылку на службу» для создания прокси?

Ответы [ 3 ]

2 голосов
/ 10 декабря 2010

Идея состоит в том, чтобы ссылаться на сборки, которые содержат контракты данных WCF в приложении silverlight, и для этого вам нужно обмануть VS, чтобы он думал, что сборка - это сборка SL, он подробно описывает это здесь

http://www.netfxharmonics.com/2008/12/Reusing-NET-Assemblies-in-Silverlight

и это не так просто, вот что нужно сделать

Просто используйте ту же процедуру ILDasm / Edit / ILAsm, которая уже упоминалась, чтобы указать сборке использовать соответствующие сборки Silverlightвместо сборок .NET.Это чрезвычайно простая процедура, состоящая только из замены, процедуры, которую можно легко автоматизировать с минимальными усилиями.Вам не нужно много времени, чтобы написать простое приложение .NET, которое сделает это за вас.Это был бы простой конвертер и валидатор .NET в Silverlight (для проверки сборок, не поддерживаемых в Silverlight).Поместите это приложение в ваши события Post Build (одна из 5 лучших функций Visual Studio!), И все готово.Не требуется специальный поиск двоичного шестнадцатеричного значения.Все, что вы делаете, это изменяете две хорошо документированные настройки (токен и версия открытого ключа).

Второе решение - это решение на уровне файлов, вы используете опцию добавления ссылок для файлов, которые содержат ваши необходимые контракты данныхреализации на SL и убедитесь, что они содержат только те типы, которые позволяют создавать SL и не ссылаются на множество внешних сборок; обычно эти условия должны выполняться для сервисов WCF и контрактов на данные.

Я могу написать больше, но это будетбыть просто копией вставки из этой ссылки

0 голосов
/ 15 марта 2012

Только одна вещь, которую я хотел бы обнаружить.Часто вам нужны пространства имен с более сложной поддержкой NET в вашей службе WCF.Поэтому у вас должны быть реальные причины для ссылки на подмножество Silverlight в вашей службе WCF (или библиотеке служб).Есть много способов использовать так называемые традиционные способы с помощью Добавить ссылку на службу .Они представлены в хорошей статье введите описание ссылки здесь .

0 голосов
/ 10 декабря 2010

Вам также нужно разделить объявление всех методов в IPersonService в соответствии с шаблоном Async (BeginXXX / EndXXX), поскольку Silverlight поддерживает только асинхронный WCF (даже в фоновых потоках).

В качестве помощи для этого вы можете добавить ссылку на службу, а затем скопировать сгенерированный IPersonService (все методы будут отделены) из файла Reference.cs. Тогда вы можете удалить ссылку.

Однако, если ваш сервисный контракт часто меняется, вам придется повторить процедуру Add-Service снова, и, начиная с этого, я бы сказал, проще использовать функцию Add-Service-Reference, чем делиться контрактом с вашим сервер приложений.

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