Каковы недостатки использования .NET RIA Services в Silverlight? - PullRequest
11 голосов
/ 30 сентября 2010

Silverlight может использовать WCF, веб-службы, службы на основе REST, службы .NET RIA, но кажется, что Silverlight и службы .NET RIA предпочтительнее всего.

Я хочу знать, есть ли какие-либо общие проблемы[который может стать препятствием для шоу, если вы продолжите эту комбо], который вы видели в практической реализации SL с .NET RIA Services.

Спасибо, Рахул

Ответы [ 8 ]

5 голосов
/ 15 октября 2010

Работа с метаданными (и написание их самостоятельно) - это действительно задница.Особенно, когда вам нужно обновить вашу модель.Учебные приложения RIA выглядят довольно хорошо в небольшой базе данных, но работая с моделью, состоящей из десятков объектов, вы потратите больше времени на обновление метаданных, чем на программирование самого приложения.Это также связано с определением валидации и всеми сообщениями валидации и описания свойств из ресурсов.Но мы создали несколько шаблонов T4, поэтому все они генерируются автоматически.

С другой стороны, мы используем RIA в двух проектах, и я должен сказать, что это лучшее, что мы можем получить.У нас были некоторые проблемы с проверкой, но она может быть решена (проверка перед проверкой, изменилось ли значение свойства).И как только вы узнаете об управлении памятью с помощью RIA (вы не хотите загружать всю базу данных в память на клиенте и т. Д.), Ее можно использовать в реальной жизни.

К сожалению, серебряной пули неттак что, если вы, например, планируете подключаться к серверу другим клиентам, кроме вашего SL-приложения, вам, вероятно, стоит посмотреть где-нибудь еще (возможно, WCP Data Services).Или, если вы не хотите обновлять данные с вашего клиента, я считаю RIA излишним.

1 голос
/ 01 ноября 2010

Сервисы Ria созданы только для использования с Silverlight. По сути, они представляют собой стандартную «упаковку», готовую к использованию Silverlight. Преимущество состоит в том, что у вас есть много сервисов без необходимости писать код, т.е.

  1. Поддержка аннотаций данных
  2. Поддержка членства провайдера и логина
  3. Поддержка передачи на сервер Silverlight сгенерированных исключений. В Silverlight есть проблема, которая затрудняет нормальную передачу ошибок исключения через FaultContract. Дело в том, что браузер не может обрабатывать все коды ошибок. Служба Риа решает эту проблему с помощью хитрости

Все, что делает Ria, может быть выполнено с помощью WCF и другого доступного программного обеспечения, в частности, с помощью служб данных Wcf. Например, для аннотаций данных я обнаружил эту библиотеку , которая работает лучше, чем службы Ria, поддержка членства просто требует активации уже существующей конечной точки членства службы WCF, и, наконец, проблему исключений легко решить, написав поведение WCF. Код доступен здесь: http://www.silverlightshow.net/Storage/10Tips.zip Дело в том, что с Ria Service все это можно сделать одним щелчком мыши !. С другой стороны, службы Ria очень сложно настроить ... поэтому, если вам не нравится стандартное решение, которое они предлагают, вы просто не сможете их использовать

1 голос
/ 19 октября 2010

Я пользуюсь RIA-Services уже несколько месяцев и парой разных приложений и обнаружил, что могу заставить его делать практически все, что мне нужно.Это экономит вам МНОГО времени, используя умную генерацию кода для решения многих задач.

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

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

Например, я использовал его с учетными данными SQL (пользователь входит в приложение Silverlight, используя свои учетные данные SQL, и я динамически создаю строку подключения, используяимя пользователя + пароль).Это заняло немного больше работы, но работает нормально.

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

1 голос
/ 18 октября 2010

ПОСЛЕ МОЕГО ПРЕДЫДУЩЕГО ОТВЕТА ЗДЕСЬ НЕДОСТАТКИ РИА УСЛУГИ: С другой стороны, недостатком риа-сервисов является отсутствие гибкости. В основном это похоже на канал, соединяющий класс на стороне сервера с его представителем на стороне клиента таким образом, что вы работаете с классом на стороне клиента, как вы работали непосредственно с классом на стороне сервера. Если способ, которым эта «трубка» обрабатывается, подходит для вашего приложения, вы получаете множество бесплатных услуг (без написания кода ...). Тем не менее, существуют ограничения, которые нельзя удалить специально:

1) У вас нет одинаковой свободы в определении поведения, атрибутов и т. Д. Для изменения поведения веб-службы. Например, вы не можете определить распределенную транзакцию, включающую более одного веб-сервиса. Трудно добавить новые конечные точки .... Вы должны написать код .... не просто изменить файл конфигурации.

2) Вы можете определить только один метод Insert / один update / один метод get для каждого класса. Если вы применяете фильтрацию к клиентскому запросу через LINQ, он применяется только к клиенту, то есть все данные загружаются с сервера и затем фильтруются на клиенте. Наоборот, если вы используете службы данных WCF на основе OData и определяете запрос на стороне клиента. ЭТОТ ЗАПРОС ПЕРЕВОДИТСЯ В ЗАПРОС ОТДЫХА (запрос, закодированный в URL запроса), ПОЭТОМУ ТОЛЬКО ДАННЫЕ, КОТОРЫЕ ВЫ ТРЕБУЕТЕ С ВАШИМ ФИЛЬТРОМ, фактически ЗАГРУЖАЮТСЯ С СЕРВЕРА. Для получения дополнительной информации о службе данных WCF см. здесь .

3) В отличие от Служб данных WCF у вас нет службы проверки, предлагаемой как служба Ria. Однако вы можете продолжать использовать аннотации данных с помощью моего Валидационного инструментария для WPF и Silverlight, который доступен бесплатно здесь

0 голосов
/ 22 октября 2010

Я написал в своем блоге сообщение о Ria WCF Data Services и WCF Rest Service, используя также некоторые выводы, сделанные здесь: здесь .

0 голосов
/ 20 октября 2010

Я очень разочарован MS.Как видно из обсуждения этой темы, я не единственный, кого иногда смущают все «инструменты», предоставляемые нами MS.Проблема в том, что очень скучаю по управлению и координации со стороны MS.

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

У меня есть два примера.

  1. Entity Framework vs.Linq to SQL в .net 3.5 Они были очень похожи, оба сделали то же самое.L2S должен был быть лучше для небольших проектов, EF для корпоративных.У L2S был намного лучший дизайнер и лучшая реализация LINQ.Предполагалось, что EF сможет отобразить больше таблиц базы данных в одну сущность, но это никогда не получалось по-настоящему хорошо.И, кстати, даже EF4 не имеет очень полезной функции L2S, которая является функцией AssociateWith <> .И вдруг L2S больше не поддерживается, и все должны использовать EF.Должен быть кто-то, кто в самом начале сказал: «Стоп, у нас есть две одинаковые технологии. Давайте соберем две команды и сделаем один продукт с лучшими из обеих».

  2. RIAСлужбы против служб данных WCF Опять та же проблема.Две отдельные команды работают над двумя похожими продуктами.Оба с некоторыми лучшими функциями, чем другие.Но определенно, может быть один продукт с функциями обоих.

Как мы должны решить, какой из них использовать (помимо того, что тратить много времени на освоение обоих)?Какой из них будет устаревшим?

... это, вероятно, для поста в блоге, а не ответа здесь.Извините, мне просто нужно было написать это где-то, и, поскольку было много разговоров по этим вопросам, это казалось подходящим местом.Я обязательно постараюсь рассказать об этом позже.

0 голосов
/ 19 октября 2010

Я использовал SL4 + EF для разработки нашего предприятия и обнаружил, что с EF трудно работать, если вы используете стандартную модель разработки по умолчанию. Под этим я подразумеваю то, что любой экран, который вы разрабатываете, для данных, которые вы используете EF с таблицей / представлением, очень быстро уничтожает вашу модель. После добавления 20 новых страниц с 6-10 таблицами / представлениями в edmx очень сложно добавить сущности. Мне лично не нравится промокание. Если вы видите некоторые из вопросов, которые я задал, и на основе ответов, которые, по-видимому, относятся к разработке на уровне предприятия, не используйте вместо этого прямо из коробки функции EF, создайте модель домена, используя POCO с PI, а затем используйте ее для разработки своего приложения. Я еще не закончил успешно, поэтому у меня нет личного результата по этому вопросу. Еще одна вещь, я заметил, что это не связанный EF как таковой, а сам SL. Потратьте некоторое время и разберитесь в PRISM / MEF / Caliburn и используйте его для создания своего приложения. Одной из проблем, которые мне не нравятся в SL, является тестируемость, хотя там есть модульное тестирование SL, но оно не является хорошей структурой для модульного тестирования. Также тестирование EF также не является легким. С PRISM / MEF / Caliburn не только легко тестирование, но и ваша разработка будет по-настоящему модульной. Поэтому, прежде чем вы начнете разработку, я рекомендую взглянуть на один из фреймворков и вместо использования EF вне коробки использовать POCO для создания модели вашего домена, а затем использовать POCO для использования в SL. Надеюсь, это поможет.

0 голосов
/ 15 октября 2010

Службы Ria и службы отдыха предлагают довольно похожий доступ к классам на стороне сервера, которые часто являются классами структуры сущностей (но не обязательно ..., как полагают некоторые программисты). Основным преимуществом Ria Services является то, что они обрабатывают валидацию с помощью аннотаций данных на серверных классах и делают это умным способом: они автоматически генерируют клиентские классы с теми же аннотациями данных и проверяют их, автоматически внедряя INotifyDataError клиентский класс. Если кто-то использует пользовательские атрибуты и помещает расширение.shared.cs (или .vb), эти определения атрибутов копируются в клиент Silverlight и используются при проверке на стороне клиента, в противном случае они используются только для проверки на стороне сервера ... ... для получения дополнительной информации, пожалуйста, смотрите мой блог

здесь

...