为什么WPF MainWindow不能成为WCF服务?

时间:2011-07-20 12:45:01

标签: wpf wcf

我有一个WPF应用程序,将通过媒体中心电脑在我的电视上显示youtube视频。此应用程序将通过WPF应用程序内托管的WCF服务接收PlayVideo(字符串VideoId),PauseVideo()等命令。

这是一个新手问题,但为什么我的MainWindow不能实现服务契约,然后使用新的ServiceHost()构造函数作为服务,该构造函数采用对象单例?

当我尝试时,我得到了这个例外:

System.InvalidOperationException:服务'Desktop.MainWindow'没有应用程序(非基础结构)端点。这可能是因为没有为您的应用程序找到配置文件,或者因为在配置文件中找不到与服务名称匹配的服务元素,或者因为在服务元素中没有定义端点。

我这样做的理由是简单的命令无论如何都需要在窗口结束,所以为什么不直接通过订阅服务上的事件或让服务有参考来间接接收消息而不是间接接收消息到MainWindow并在其上调用方法。

2 个答案:

答案 0 :(得分:1)

错误,System.InvalidOperationException:服务'Desktop.MainWindow'没有应用程序,只是意味着你的app.config(如果你有的话)没有端点或A,B,C的设置正确(地址,绑定) ,合同)。

您可以以winform或wpf形式托管wcf服务,您只希望在某种概念证明工作中为测试项目执行此操作,但从不在您计划提供给客户端的应用程序或真正的用户。

如果您是WPF的新手,我强烈建议您阅读模型 - 视图 - 视图 - 模型设计模式。这将允许您实现从WPF应用程序中的UI中抽象出来的WCF服务,并且可以更好地分离应用程序中逻辑的关注点和责任。

答案 1 :(得分:0)

如果您正在编写其他人要维护的代码,那么我会说......

为什么不呢?因为你在混合责任领域。主窗口不需要了解有关WCF的任何信息,它的工作是在屏幕上显示内容。

鉴于它是适合您个人需求的应用程序,没有人关心您使用的结构(只是不要让别人维护它!):)话虽如此,如果您想让自己轻松修改,我建议努力保持代码清洁。在我看来,你的目标是不符合这种描述。

您的主窗口可能会实施该服务合同,但我认为这是一个非常糟糕的主意。