代码之家  ›  专栏  ›  技术社区  ›  mwjackson

如何通过WCF公开对象?

  •  3
  • mwjackson  · 技术社区  · 17 年前

    我的项目被拆分为Silverlight应用程序的典型3层结构。即:

    • 基础层,它是一个类库,包含我的所有业务对象、逻辑、数据访问等。
    • 中间层是一个WCF服务,它与以下对象进行通信:;
    • 我的Silverlight前端

    我遇到的问题是,目前通过WCF向我的UI公开的BO只包含私有变量,而不包含任何属性或方法。

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

    最好的解决方案是什么?

    4 回复  |  直到 17 年前
        1
  •  8
  •   Sixto Saez    17 年前

    您似乎希望将WCF服务中使用的、标记为DataContracts的内部类导出为。NET对象到客户端代码(Silverlight UI)。WCF不支持此功能。标记为DataContract的类只是一个没有方法的数据结构。如果你需要一个好的资源来处理不理解的WCF,请尝试 Learning WCF: A Hands-on Guide by Michele Bustamente .

    @约翰·费舍尔确实提出了一种揭露的方法。NET对象发送到客户端和;服务,但这可能不是Silverlight的选项。这是一个 blog entry 解释如何从Silverlight访问基于REST的服务。

        2
  •  2
  •   jezell    17 年前

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

        3
  •  1
  •   John Fisher John Fisher    17 年前

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

        4
  •  1
  •   Community Mohan Dere    9 年前

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

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

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

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