Совместное использование сервисных интерфейсов и моделей в Silverlight с использованием WCF - PullRequest
5 голосов
/ 08 ноября 2008

Допустим, у меня есть следующий интерфейс, которым я хочу поделиться между моим сервером (обычная веб-служба) и моим клиентом (приложение silverlight 2.0):

public interface ICustomerService
{
    Customer GetCustomer(string name);
}

Мой веб-сервис реализует этот интерфейс и ссылается на библиотеку классов, в которой определен тип Customer.

Обычно, если вы хотите использовать эту услугу из клиента WCF, например, приложения winforms, вы можете поделиться своей моделью сборки и интерфейсами контракта на обслуживание. Затем, используя ChannelFactory, вы можете динамически создать прокси-сервер, который реализует интерфейс вашего сервиса. Что-то вроде:

ICustomerService myService = new ChannelFactory<ICustomerService>(myBinding, myEndpoint);
Customer customer = myService.GetCustomer("romain");

Я в основном хочу сделать то же самое, но из приложения Silverlight 2.0. Серебряный свет ChannelFactory, похоже, не действует как другой ...

Вы знаете, возможно ли это?

Примечание. Поскольку приложение Silverlight может ссылаться только на проекты Silverlight, у меня есть:

Две версии MyModel.dll, которые содержат Customer тип:

  • Один скомпилированный целевой .NET Framework 3.5, на который ссылается мой проект веб-службы
  • Еще одна скомпилированная целевая среда silverlight 2.0, на которую ссылается мое приложение silverlight

Две версии MyServicesContracts.dll, которые содержат ICustomerService интерфейс:

  • Один скомпилированный целевой .NET Framework 3.5, на который ссылается мой проект веб-службы
  • Еще одна скомпилированная целевая среда silverlight 2.0, на которую ссылается мое приложение silverlight

Ответы [ 4 ]

3 голосов
/ 08 ноября 2008

Я думаю, вы найдете эту тему интересной. Вы можете обмениваться файлами кода между отдельными проектами или компилировать один проект для нескольких целей.

0 голосов
/ 19 июля 2012

Я знаю, что уже слишком поздно предлагать решение, но это была и моя проблема, и я нашел Portable Class Libraries . Это идеальное решение вашей проблемы.

0 голосов
/ 13 ноября 2008

Очень короткие ...


Вы можете создать свои прокси в приложении Silverlight, добавив ссылку на сервис к вашему сервису. Когда вы сделаете это, ваши прокси будут автоматически сгенерированы на клиенте.


Ваши интерфейсы сервисов wcf должны быть аннотированы с атрибутами DataContract и OperationContract, а классы POCO, используемые с этими сервисами, должны иметь атрибуты DataContract и DataMember.


http://msdn.microsoft.com/en-us/library/cc197940(VS.95).aspx

0 голосов
/ 10 ноября 2008

Я могу ошибаться, но я думаю, что если вы украшаете объекты, возвращаемые вашей службой WCF, с помощью атрибутов DataContract и DataMember, вы сможете обмениваться объектами между приложением Silverlight и службой WCF, не создавая класс в своем клиенте должен обрабатываться прокси.

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