了解WCF的工作原理

时间:2011-03-01 13:26:26

标签: silverlight wcf nhibernate dto

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

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

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

2 个答案:

答案 0 :(得分:5)

不,不太......

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

  • 同样的步骤 - 基本上是向后 - 完成了回复

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

答案 1 :(得分:1)

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

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