WCF行为配置为.NET Remoting

时间:2011-12-15 21:56:48

标签: c# .net wpf wcf remoting

目标

运行包含业务逻辑的本地服务器(WCF),该业务逻辑在计算机启动时跟踪信息(当用户以普通进程登录时运行)。包含表示逻辑的本地客户机(WPF)可以连接到易于使用的本地服务器,以将跟踪的信息呈现给最终用户。一切都是本地的,非关键的,安全性不是问题。

实施

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

问题

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

我该寻求什么?

创建我提到的体系结构的示例,或者说明如何配置WCF以与Remoting类似的方式运行的基本示例。我能找到的每个在线资源,包括MSDN文章,都是为.NET 2.0编写的。自.NET 2.0以来,WCF世界发生了很多变化,使用.NET 4.0是必需的。甚至链接到样本,教程或文章,以便在.NET 4.0中为WCF做类似Remoting的行为!

1 个答案:

答案 0 :(得分:1)

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

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

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

这就是这样的。一个好的设计应该允许任何人潜在地消费它并用它做他们想做的事。诸如flikr,facebook或amazon之类的网络服务不会告诉您如何或建议您应在应用程序中显示哪些信息,您也不应该这样做。 (我不是主张盲目跟随他们的设计,但这是一个你可以看一下的社区例子。)

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