Есть ли способ, кроме «копировать и вставить наследование», чтобы разделить класс .net с приложением Silverlight? - PullRequest
2 голосов
/ 15 марта 2010

У меня есть проект, состоящий из двух частей: интерфейс Silverlight и дуплексный сервис WCF. В идеале я хотел бы передать сообщение пользовательского типа (назовите его TradeOffer) из службы WCF для использования приложением Silverlight.

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

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

Есть ли какой-то способ получить доступ к определению класса сообщений как из клиента Silverlight, который его использует, так и из службы, которая его публикует, без использования атрибута InternalsVisibleTo, или мне следует написать приложение другим способом?

Ответы [ 4 ]

2 голосов
/ 15 марта 2010

In Повторное использование сборок .NET в Silverlight Автор описывает несколько методов, которые могут быть полезны. Я использовал общий доступ к файлам и обнаружил, что он работает очень хорошо. (http://www.netfxharmonics.com/2008/12/Reusing-NET-Assemblies-in-Silverlight)

Аналогичная статья: Совместное использование сущностей между WCF и Silverlight . (http://10rem.net/blog/2009/07/13/sharing-entities-between-wcf-and-silverlight)

1 голос
/ 15 марта 2010

Стандартный способ сделать то, что вы описываете, - создать ссылки на службы WCF с помощью диалогового окна Добавить ссылку на службу. Затем происходит то, что Visual Studio создает для вас прокси-сервер, который включает в себя серию классов Silverlight, которые имеют те же поля и свойства, что и ваш класс .NET. Конечно, это не передает никакой бизнес-логики, но вы все равно не должны использовать такой класс для беспроводной передачи данных. (Другими словами, объекты передачи данных должны быть настолько глупыми, насколько это возможно.)

Вы также можете использовать службы RIA в качестве более динамичной альтернативы диалоговому окну «Добавить ссылку на службу», но, насколько я понимаю, службы RIA на данный момент не работают с дуплексными службами. 1005 *

В мире Silverlight 4 возможно ограниченное количество общих сборок, если вы начинаете с компиляции сборки в Silverlight: http://blogs.msdn.com/clrteam/archive/2009/12/01/sharing-silverlight-assemblies-with-net-apps.aspx

1 голос
/ 15 марта 2010

Сборка 2 разных VS проектов / сборок. Один для Silverlight и один для сервера. Используйте один и тот же файл физического класса в обоих проектах. Если у вас есть Silverlight или Server специальные функции в компоненте; вы можете использовать директивы компилятора для их сортировки.

0 голосов
/ 30 января 2011

Остальные посты были правильными, но я подумал, что я добавлю обновление: -

...