2012-01-17 3 views
0

У меня есть служба данных Oata i.e, WCF. Возможно, клиент Silverlight может программно добавить ссылку этой службы только с URL-адресом службы?Как программно добавить ссылку службы данных WCF (ODATA) в silverlight

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

ответ

2

Это невозможно по нескольким причинам, пара из них:

  • Добавить ссылку на службу в Visual Studio генерирует код (на стороне клиента классы для лиц, и другие виды, предоставляемые службой). Silverlight не имеет необходимых библиотек для решения этой задачи достаточно легко (много кода пришлось бы переписать/портировать на Silverlight для этого).

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

  • Это не очень практично для использования, так как ваш код, использующий это, должен иметь дело с типами, которые он не знает заранее (типы, сгенерированные кодом выше). Поэтому вам придется использовать много отражений или другие подобные трюки.

Если вы хотите написать клиентское приложение, которое может получить доступ к произвольной службе OData Я хотел бы предложить вам посмотреть на Microsoft.Data.OData.dll. Это часть недавнего CTP: http://blogs.msdn.com/b/astoriateam/archive/2011/10/13/announcing-wcf-data-services-oct-2011-ctp-for-net-4-and-silverlight-4.aspx И он реализует читателей и писателей для формата OData (что-то вроде XmlReader/XmlWriter, но для OData). В частности, он не требует знания службы вверх, он может читать любой ответ OData.

0

Вы должны сделать следующее:

BasicHttpBinding binding = new BasicHttpBinding(); 
var endpoint = new EndpointAddress("<Yours Endpoint Address>"); 
var factory = new ChannelFactory<IYourServiceContract>(basicHttpBinding, endpointAddress); 

Надеется, что это поможет.

+0

Но это для нормальной службы WCF, если я не ошибаюсь. Точно так же и для службы данных WCF? –