【问题标题】:WCF behaviour configuration as .NET RemotingWCF 行为配置为 .NET Remoting
【发布时间】:2011-12-15 21:56:47
【问题描述】:

目标

运行本地服务器 (WCF),其中包含在计算机开机时跟踪信息的业务逻辑(当用户作为普通进程登录时运行)。包含呈现逻辑的本地客户端 (WPF) 可以连接到现成的本地服务器,以将跟踪的信息呈现给最终用户。一切都是本地的和非关键的,安全不是问题。

实施

最初我基于Remoting技术编写了一个本地服务器,该技术被认为是遗留技术,并将本地客户端连接到本地服务器。每个共享对象都是远程共享的,可以被调用。

问题

无法远程序列化 Lambda 表达式(启用折射器的属性名称绑定)和事件。我知道可以使用启用远程的对象绑定事件并在服务器上调用该对象,但是,这会破坏 WPF 数据绑定。事件驱动编程很重要。

我要寻找什么?

创建我提到的体系结构的示例,或者显示如何配置 WCF 以与 Remoting 类似的方式运行的基本示例。我能找到的所有在线资源,包括 MSDN 文章,都是为 .NET 2.0 编写的。自 .NET 2.0 以来,WCF 世界发生了很多变化,使用 .NET 4.0 是一项要求。甚至指向 .NET 4.0 中 WCF 的类似 Remoting 行为的示例、教程或文章的链接也值得赞赏!

【问题讨论】:

  • WCF 的消息传递体系结构旨在支持松散耦合的客户端和服务。松散耦合意味着通过消息交换状态(数据)并且共享行为(代码)。 WCF 版本不会改变这个基本的设计目标。虽然可以使用消息传递模式对事件进行建模,但它们通常以紧密耦合的方式使用。我不认为 WCF 非常适合您的实现,这可能是您找不到任何示例代码的原因 :)
  • 您的主要问题是无法在客户端和服务器之间共享公共代码,还是跨 wcf 边界序列化事件?
  • 使用远程处理时,事件是阻止 WPF 正确交互的主要问题。 WPF 能够绑定到事件以进行属性更改是绝对必要的。共享接口足以实现互操作性,但没有什么能阻止我共享所有代码——只要服务器包含实际对象。如果 WCF 不是正确的技术,您介意我推荐一下可以满足我要求的技术吗?

标签: c# .net wpf wcf remoting


【解决方案1】:

WCF 是一项出色的技术,但是正如其他人所评论的那样,听起来您正试图违反 WCF 的核心原则。我在这里可能错了,但听起来您想将视图模型发送到远程边界?

在我看来,跨远程边界发送视图模型是错误的原因是架构原因。原因是我可能有多个客户端应用程序,即一个网站和一个 wpf 桌面应用程序。该视图模型仅与 WPF 应用程序相关。它主要是特定于平台的(在大多数情况下)。由于视图模型是特定于平台的,它们属于平台而不是您的服务。

您的 DTO 实体(即服务模型类)必须与您的视图模型分开,因为您的视图要求可能会在任何一个客户端应用程序上发生变化,并且您的服务可能希望在很大程度上提供与以前相同的服务。您的客户端应用程序可以依赖您的模型实体。我通常将它们放在我的服务项目和我的客户端应用程序项目通用的公共项目中。

这样说吧。一个好的设计应该允许任何人潜在地使用它并用它做他们想做的事。诸如 flikr、facebook 或 amazon 之类的 Web 服务不会告诉您如何或建议您应该在应用程序上显示哪些信息,您的应用程序也不应该。 (我并不是提倡盲目地遵循他们的设计,但这是一个社区示例,您可以看看)。

您的视图模型应该通过实现 INotifyPropertyChanged 接口等默认使用可绑定数据类型,因此更新视图模型上的数据应该是一件非常容易的事情。设计应用程序时最好的办法是思考,如果我做了一些不在我的功能列表中的事情,我会怎么做。我是否更难说,向公众公开我的服务(甚至认为这不是我的意图)。这将使您的设计保持稳健,并在客户改变主意时保持良好状态。

【讨论】:

  • 基本上你应该只在你的远程边界发送 vanila POCO 对象。
  • 只是为了澄清:我应该通过远程边界的普通对象传输来实现本地服务器,并让连接的客户端构造一个 ViewModel 以供 WPF 使用。本质上,连接客户端将复制服务器提供的对象并将它们保存在内部存储中。假设我的理解是正确的,我仍然需要一种方法让本地服务器通知连接的客户端有关新对象和更改的对象。这在 WCF 中是否可行?
  • 我这样做的方法是拥有一个我的所有模型都继承的类。这将有一个 Id 属性。如果 Id 为零,则表示该对象尚未保存。如果不为零则已保存,则为修改对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 2013-09-13
相关资源
最近更新 更多