斯蒂安,
感谢您的快速回复。我观看了 Miguel Castro 的截屏视频,内容非常丰富。不幸的是,它没有涵盖silverlight的情况。但是,以此为起点,我能够得到一些其他人可能会觉得有用的东西。
创建两个程序集:ServerDataContracts 和 SilverlightDataContracts(这一个作为 silverlight 程序集)。在每个人的 AssemblyInfo.cs 中添加以下行:
[assembly: ContractNamespace("http://YourNamespaceUri",
ClrNamespace = "YourDataContractsNamespace")]
将所有 DataContracts 添加到 ServerDataContracts 程序集。在 SilverlightDataContracts 程序集中,右键单击项目(或子文件夹)并选择“添加现有项”。浏览到 ServerDataContracts 程序集中的 DataContracts 并选择要添加的那些。不要点击“添加”!!!相反,单击“添加”旁边的向下箭头并选择“添加为链接”。这会将 SilverlightDataContracts 项目链接到 ServerDataContracts 项目中的现有文件。现在,当您编辑一个项目时,两个项目都会得到更改。编译时,项目会使用正确的目标单独编译。
现在添加 ServerDataContracts 程序集作为对您的服务合同项目的引用。对 Silverlight 应用程序的 SilverlightDataContracts 程序集执行相同的操作。当您将来自 silverlight 客户端的服务引用添加到您的服务时,它不应生成数据合同。它应该改为使用您程序集中的那些。
我已经完成了这项工作,但是它仍然缺少生成的数据合同类提供的一些功能。生成的类实现了 INotifyPropertyChanged,这在 silverlight/wpf 中进行数据绑定时非常有用。虽然您可以自己实现它,但它相当乏味,现在您的服务器代码必须在每个属性集上执行所有这些事件处理程序,即使您可能永远不会订阅服务器上的 PropertyChanged 事件。
我仍在寻找一种更清洁的方法来处理这个问题。看起来 silverlight 4 将使这更容易,因为您可以在客户端和服务器中使用相同的程序集(编译的代码是兼容的)。不幸的是,这对我的需求来说太远了。