【问题标题】:Understanding how WCF works了解 WCF 的工作原理
【发布时间】:2011-03-01 13:26:25
【问题描述】:

我在客户端 UI (Silverlight 3.0) 和数据层之间使用 WCF 服务。我们使用 NHibernate 进行数据库访问。所以请告诉我我的以下理解是否正确:

  • UI 为保存方法调用 WCF(例如)。
  • WCF 中有一个 Save 方法,它实际上封装了 Data 中的 Save 方法 访问对象。
  • Save 的 Data Access Object 方法又封装了一个默认的 Save Method NHibernate 实际上将一些业务对象保存到数据库中。

也有人可以告诉我,我们如何将对象从 WCF 传递到 UI (Silverlight 3.0) 层,反之亦然。我读过我们为此使用 DTO。但是 DTO 是如何工作的呢?它们是否对应于 WCF 中的“数据合同”?如果不是,那么 DTO 是否也在 WCF(服务器)端和客户端代码上声明?

【问题讨论】:

  • 非常感谢您提醒我规则。很抱歉没有关注他们。

标签: silverlight wcf nhibernate dto


【解决方案1】:

不,不完全是……

  • UI调用客户端代理方法Save
  • WCF 运行时接受该调用和传入的所有参数,并将它们序列化为消息(通常是 XML 序列化消息)
  • WCF 运行时通过某种传输媒体(无论它是什么)发送序列化消息
  • 在服务器端,WCF 运行时接收传入消息
  • 消息被反序列化,识别处理它的适当类和方法
  • 通常:实例化一个服务类的新实例来处理请求
  • WCF 运行时解包参数并调用服务类上的相应消息

  • 相同的步骤 - 基本上是向后的 - 用于响应

重要一点:客户端和服务器之间唯一序列化消息(可以通过电子邮件或信鸽发送) - 有 没有其他连接 - 根本没有“远程对象调用”或类似的东西

【讨论】:

  • 非常感谢您的回答。
  • 我得到了使用 WCF 时传递 XML 消息的概念。我的理解是,如果我们想将 Employee 对象的值从 WCF 传递到 UI,那么我们将 Employee 声明为 Data Contract 并将值传递到 WCF 和从 WCF 传递值。如果我错了,请纠正。此外,如果是这种情况,那么这里的 Employee 类在某些方面是否代表 DTO?
  • @tahoka:你是绝对正确的。 DataContract 描述了如何将 CLR 对象序列化为消息。是的 - 这些对象通常是数据传输对象 - 只是属性,没有功能
【解决方案2】:

marc_s 提到了客户端代理,可以通过 Silverlight 项目中的service references 生成。生成的代理足够好,并为从 Silverlight 端运行请求提供了一个异步模型;这些看起来更像是远程过程调用。

另一种方法是直接使用更精简(但可能更高级?)的渠道工厂。一个简单的例子可以在here 找到。这两种方法都会为您处理大部分序列化细节。

【讨论】:

  • 好点 - 但基本前提没有改变 - WCF 仍然只交换序列化消息,没有任何类型的“远程对象”连接......
  • 完全同意。我提高了您对交易所的描述,实际上可能会在对话中使用它(带有免责声明!)。在我的帖子中,我试图添加如何让这种交换发挥作用。
猜你喜欢
  • 2016-02-20
  • 2012-12-11
  • 2011-02-18
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多