.net 如何通过WCF公开对象?

.net 如何通过WCF公开对象?,.net,wcf,silverlight,.net,Wcf,Silverlight,我的项目被分割成一个典型的Silverlight应用程序的3层结构。即: 基本层,它是一个类库,包含我的所有业务对象、逻辑、数据访问等 中间层,该层是一个WCF服务,与之通信 我的Silverlight前端 我的问题是,目前通过WCF向我的UI公开的BO只包含私有变量,没有任何属性或方法 是否有一种简单的方法公开完整对象(通过属性或配置) 最好的解决方案是什么?我在一个小项目上做了类似的事情,创建了一个“通信层”dll,其中只包含在客户端和服务器之间传递的对象。这种方法的一种变体(在需要这些

我的项目被分割成一个典型的Silverlight应用程序的3层结构。即:

  • 基本层,它是一个类库,包含我的所有业务对象、逻辑、数据访问等
  • 中间层,该层是一个WCF服务,与之通信
  • 我的Silverlight前端
我的问题是,目前通过WCF向我的UI公开的BO只包含私有变量,没有任何属性或方法

是否有一种简单的方法公开完整对象(通过属性或配置)


最好的解决方案是什么?

我在一个小项目上做了类似的事情,创建了一个“通信层”dll,其中只包含在客户端和服务器之间传递的对象。这种方法的一种变体(在需要这些对象的所有项目之间共享一个dll)应该适合您。不过,请注意版本控制问题。除非您完全控制两端,否则升级到一端可能会引起麻烦,如果您不小心的话。

似乎您希望将WCF服务中使用的内部类(标记为DataContract)作为.NET对象导出到客户端代码(Silverlight UI)中。WCF不支持此功能。标记为DataContract的类只是一个没有方法的数据结构。如果你需要一个好的资源来支持不可靠的WCF,试试看

@John Fisher确实提出了一种向客户端和服务公开.NET对象的方法,但这可能不是Silverlight的选项。下面介绍如何从Silverlight访问基于REST的服务。

是正确的。使用WCF,您可以在客户端和服务之间共享BO DLL,并重新使用这些对象(只需以这种方式配置WCF服务引用),但这在您的情况下不起作用。问题是您的BO项目是标准的.NET项目,而不是silverlight项目

通常,我的项目结构与您的略有不同:

  • 公共对象-这些对象将是用WCF属性标记的数据结构,还将包含任何公共接口,例如我的数据层接口
  • 数据访问-任何数据访问对象。这只引用公共对象,并从数据调用返回这些对象
  • 业务逻辑(可选)-如果有其他web服务与它接口,请将其粘贴在自己的层中
  • 服务——实际的WCF服务,通过接口直接引用公共项目和其他项目
  • Silverlight-引用服务

如果您将业务逻辑移出到它的项目中,并且只引用了常见的“哑”对象,那么您可能会创建两个逻辑项目,一个是silverlight,一个是standard,一个是实际文件,另一个是创建指向这些文件的链接。这样,您将在两个项目中获得相同的逻辑,它将同时存在于Silverlight和standard.NET中。

使用[DataContract]属性标记服务正在使用的对象,然后将[DataMember]放在公共属性上。这将解决您的问题。

您是说我需要创建具有DataContract属性的代理对象?并使用类库中的my BO来填充这些对象?Visual Studio通过向项目添加服务引用来生成WCF服务的代理。生成的代码将创建表示DataContract的类和表示OperationContract的方法。WCF服务是为了故意隐藏内部服务对象而设计的。耶,别担心。我现在有了。我一开始并没有使用datacontracts,只是WCF自动生成了代理类。但我已经正确地添加了它们,这是一个更好的解决方案。Thankso Sixto使用带有DataContract属性的哑代理对象的解决方案是最好的解决方案吗?