Проблема совместного использования доменной модели между WCF и Silverlight Project

Я пишу крупномасштабное приложение Silverlight. В настоящее время я пишу элементы поиска данных.

Я сейчас воспользовался и выдаю.

У меня есть общий проект, содержащий объекты, на этот проект ссылаются как пользовательский интерфейс, так и служба WCF. Для привязки пользовательскому интерфейсу требуется INotifyPropertyChanged.

Теперь WCF должен использовать те же объекты, но я получаю сообщение об ошибке компилятора:

«Тип System.ComponentModel.INotifyPropertyChanged определен в сборке, на которую нет ссылки».

РЕДАКТИРОВАТЬ: ошибка в службе WCF.

Мне нужен один объектный класс, как мне решить эту проблему?

http://www.pcbuyersguide.co.za/picture.php?albumid=19&pictureid=1708

Спасибо -Oliver


person Oliver    schedule 17.02.2010    source источник
comment
Оливер, загорелась лампочка. Я давно не занимался этим. смотри мой ответ. И вы должны изменить заголовок вопроса на что-то вроде модели домена проблемы совместного использования между WCF и Silverlight Project.   -  person Sky Sanders    schedule 17.02.2010
comment
Никто не ответил на мой вопрос, так как я могу отметить ответ ....   -  person Oliver    schedule 25.02.2010
comment
@ Оливер ... ммм ... да. на ваш вопрос был дан ответ. ;-) 17 февраля в 17:00. щелкните ссылку и найдите «Связывание файлов в сборках Silverlight».   -  person Sky Sanders    schedule 25.02.2010
comment
На меня особо не оказывалось давление, но я не получил, чтобы это полностью работало, как вы можете видеть в моем последнем комментарии к вашему ответу. Я чувствую, что мы приближаемся. Спасибо за вашу помощь.   -  person Oliver    schedule 10.03.2010


Ответы (3)


arrow_upward
3
arrow_downward

Если вы планируете использовать один и тот же исходный код для своих Entities (домена) как для проекта clr, так и для проекта silverlight, вам нужно будет использовать 2 проекта, поскольку сборки Silverlight не совпадают со сборками CLR.

Добавьте в решение проект библиотеки классов Silverlight, имя не имеет значения, но обычно я использую просто XXXX_SL.

Теперь вы «Добавить существующий элемент» для всех исходных файлов из проекта clr, но заметили раскрывающийся список на кнопке «Открыть» или «Выбрать»? щелкните по нему и «добавить как ссылку» или что там написано.

Теперь вы используете один и тот же источник для обоих проектов, и ваше решение будет скомпилировано.

По пути могут быть внесены некоторые незначительные изменения, но они направят вас на верный путь.

Вот некоторые справочные материалы

person Sky Sanders    schedule 17.02.2010
comment
Извините, я забыл упомянуть, что ошибка возникает при компиляции службы WCF. Отредактировал первое сообщение - person Oliver; 17.02.2010
comment
@Oliver: ну, System.ComponentModel.INotifyPropertyChanged живет в System (mscorlib.dll), так что ... если нет ссылки на System, добавьте ее. это было бы странно, но может случиться. - person Sky Sanders; 17.02.2010
comment
Я добавил оператор using System.ComponentModel, и проблема все еще сохраняется. Вот почему я написал, потому что это кажется неправильным, и мне было интересно, не упустил ли я что-то. - person Oliver; 17.02.2010
comment
В службе есть оператор System.ComponentModel using, класс позволяет мне видеть интерфейс INotifyPropertyChanged, но я все еще не могу скомпилировать: 'System.ComponentModel.INotifyPropertyChanged' определен в сборке, на которую нет ссылки. Вы должны добавить ссылку на сборку «Система, Версия = 2.0.5.0, Культура = нейтральный, PublicKeyToken = 7cec85d7bea7798e» - person Oliver; 25.02.2010
comment
@Oliver: обратите внимание, как это выглядит в версии 2.0.5.0. Это версия Silverlight. Обычная версия .NET - 2.0.0.0. - person John Saunders; 25.02.2010
comment
@oliver - Я ответил на ваш вопрос большой жирной ссылкой. Я не догадываюсь. Вот как вы делитесь исходным кодом между проектами clr и silverlight. Я сделал это. неоднократно. с успехом. - person Sky Sanders; 25.02.2010
comment
@Oliver: решение - послушать, что говорит @Sky: он делал это раньше. Я просто указываю на разницу версий. - person John Saunders; 25.02.2010
comment
Не сомневался в твоем совете, Скай, это ценится. У меня новый вопрос, ваш метод отлично работает с INotifyPropertyChanged, но как теперь добавить ObservableCollection в модель CLR? - person Oliver; 04.03.2010
comment
Добавьте ссылку на WindowsBase.dll - c: \ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.0 \ WindowsBase.dll - person Sky Sanders; 04.03.2010
comment
Это решает проблему со ссылками в модели CLR, но служба WCF, которая использует эту модель, теперь не будет размещать сообщение об ошибке: «Не удалось загрузить файл или сборку» System.Windows, Version = 2.0.5.0, Culture = нейтральный, PublicKeyToken = 7cec85d7bea7798e 'или одну из его зависимостей. Это ссылка на Silverlight. Как мне решить эту проблему? - person Oliver; 10.03.2010
comment
На стороне wcf вы должны использовать только свою модель clr, и она не должна иметь ссылок на silverlight. Преобразование неявное, сериализатор silverlight автоматически преобразует json в вашу модель silverlight. - person Sky Sanders; 10.03.2010
comment
Хорошо, извините, VS просто подыгрывает. Я удалил ссылку на модель и снова добавил ее, и она довольна. СПАСИБО! - person Oliver; 10.03.2010
comment
Рад, что все получилось. Вы можете иметь в виду, что операция «Очистить» очень полезна в ситуациях, когда ссылки кажутся запутанными. - person Sky Sanders; 10.03.2010
comment
Ссылка в конце поста отличная! - person Eric J.; 12.05.2010

arrow_upward
0
arrow_downward

вы добавили ссылку в компилируемый проект на System.ComponentModel

person rerun    schedule 17.02.2010

arrow_upward
0
arrow_downward

Я нашел здесь метод , который позволяет создавать классы CLR на на стороне службы, а затем можно использовать сгенерированные объекты из ссылки на службу, поскольку классы создаются с помощью INotifyPropertyChanged и ObservableCollection.

Это решает непосредственную проблему границы клиент / сервер, но вписывается в мое решение, потому что для использования сгенерированных объектов вам нужна ссылка на службу. Но у меня есть ProxyClass, который общается с WCF, поэтому я не вижу способа передать эти типы объектов обратно в ViewModel.

Я вижу, что некоторые люди написали классы сопоставления, но это далеко не идеально, поскольку мне пришлось бы написать 3 класса для каждого объекта POCO (клиентский класс, серверный класс DTO, сопоставитель).

Есть еще предложения?

person Oliver    schedule 25.02.2010