Стиан,
Спасибо за быстрый ответ. Я смотрел скринкаст Мигеля Кастро, он был очень информативным. К сожалению, это не касается ситуации с серебристым светом. Однако, используя это в качестве отправной точки, я смог получить что-то работающее, что другие могут найти полезным.
Создайте две сборки: ServerDataContracts и SilverlightDataContracts (на этот раз как сборку silverlight). В каждом AssemblyInfo.cs добавьте следующую строку:
[assembly: ContractNamespace("http://YourNamespaceUri",
ClrNamespace = "YourDataContractsNamespace")]
Добавьте все свои DataContracts в сборку ServerDataContracts. В сборке SilverlightDataContracts щелкните правой кнопкой мыши проект (или подпапку) и выберите «Добавить существующий элемент». Перейдите к DataContracts в сборке ServerDataContracts и выберите те, которые хотите добавить. НЕ НАПАДАЙТЕ "ДОБАВИТЬ" !!! Вместо этого нажмите стрелку вниз рядом с «Добавить» и выберите «Добавить как ссылку». Это связывает проект SilverlightDataContracts с существующими файлами в проекте ServerDataContracts. Теперь, когда вы редактируете один, оба проекта получают изменения. Когда вы компилируете, проекты компилируются отдельно со своими правильными целями.
Теперь добавьте сборку ServerDataContracts в качестве ссылки на проект контракта на обслуживание. Сделайте то же самое для сборки SilverlightDataContracts в приложении Silverlight. Когда вы добавляете ссылку на службу из клиента Silverlight в свою службу, она не должна создавать контракты данных. Вместо этого он должен использовать те, что из вашей сборки.
Я получил эту работу, однако по-прежнему отсутствуют некоторые функции, предоставляемые сгенерированными классами контрактов данных. Сгенерированные классы реализуют INotifyPropertyChanged, что чрезвычайно полезно при привязке данных в silverlight / wpf. Хотя вы можете реализовать это самостоятельно, это довольно утомительно, и теперь ваш серверный код должен выполнять все эти обработчики событий для каждого набора свойств, даже если вы, вероятно, никогда не подпишетесь на событие PropertyChanged на сервере.
Я все еще ищу более чистый способ справиться с этим. Похоже, Silverlight 4 упростит это, поскольку вы можете использовать одну и ту же сборку как на клиенте, так и на сервере (скомпилированный код совместим). К сожалению, это слишком далеко для моих нужд.
person
Robert Graves
schedule
18.02.2010