我的项目分为Silverlight应用程序的典型3层结构。那就是:
我遇到的问题是,目前通过WCF向我的UI公开的BO只包含私有变量,而不包含任何属性或方法。
是否有一种简单的方法来公开整个对象(通过属性或配置)?
什么是最佳解决方案?
答案 0 :(得分:8)
您似乎期望WCF服务中使用的内部类(已标记为DataContracts)作为.NET对象导出到客户端代码(Silverlight UI)。 WCF不支持此功能。标记为DataContract的类只是一个没有方法的数据结构。如果您需要一个很好的未来WCF资源,请尝试Learning WCF: A Hands-on Guide by Michele Bustamente。
@John Fisher确实勾勒出一种向客户端和客户端公开.NET对象的方法。服务,但这可能不是Silverlight的选项。这是一个blog entry,解释了如何从Silverlight访问基于REST的服务。答案 1 :(得分:2)
使用[DataContract]属性标记服务正在使用的对象,然后将[DataMember]放在公共属性上。这将解决您的问题。
答案 2 :(得分:1)
我通过创建一个“通信层”dll在一个小项目上做了类似的事情,它只包含在客户端和服务器之间传递的对象。这个的变体(在需要这些对象的所有项目之间共享一个dll)应该对你有用。但请注意版本问题。除非你完全控制两端,否则升级到一端可能会引起麻烦,如果你不小心的话。
答案 3 :(得分:1)
Sixto's answer是正确的。使用WCF,您可以在客户端和服务之间共享BO DLL并重用这些对象(只需以这种方式配置WCF服务引用),但这不适用于您的情况。问题是您的BO项目是标准的.NET项目而不是Silverlight项目。
通常,我的项目结构与您的项目略有不同:
如果您将业务逻辑移到其项目中并且只引用了常见的“哑”对象,那么您可以创建两个逻辑项目,一个silverlight和一个标准,并且只需将实际文件放在一个中并创建链接另一个中的那些文件。这样,您将在两个项目中获得相同的逻辑,并且它将存在于Silverlight和标准.NET中。