Stian,
Спасибо за быстрый ответ. Я смотрел скриншот Мигеля Кастро, и он был очень информативным. К сожалению, это не покрывает ситуацию с серебряным светом. Однако, используя это в качестве отправной точки, я смог заставить что-то работать, что другие могут найти полезным.
Создайте две сборки: 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 облегчит эту задачу, поскольку вы можете использовать одну и ту же сборку как на клиенте, так и на сервере (скомпилированный код совместим). К сожалению, это слишком далеко для моих нужд.