在WPF应用程序中运行WCF侦听器

时间:2011-05-30 07:58:23

标签: wpf wcf

我们希望能够从服务器与WPF应用程序进行通信。

是否可以在WPF应用程序中拥有WCF侦听器/服务?然后调用此服务在WPF应用程序中打开一个屏幕?

2 个答案:

答案 0 :(得分:3)

  

是否可以在WPF应用程序中拥有WCF侦听器/服务

在任何地方创建WCF服务侦听器/服务器非常简单。

var servicehost = new ServiceHost(typeof(SomeService))
servicehost.Open();

一个问题是您必须拥有足够的权限才能看到主机。您可能必须提升您的应用程序,并且肯定必须确保防火墙(软件/硬件)允许流量到达它。

此链接似乎涵盖了WCF MSDN示例的网络设置,并适用于IIS托管以及您的案例,非IIS托管的WCF:

http://msdn.microsoft.com/en-us/library/ms751527(v=vs.90).aspx

此外,您可能会遇到线程并发症,但在尝试从后台线程更新UI的任何情况下都会遇到这些问题。如果您遇到此问题,请查看Dispatcher

http://msdn.microsoft.com/en-us/magazine/cc163328.aspx

之后,您可以创建一个客户端/服务器设计,确保在正确的时间创建和收听您的服务,并在正确的时间拆除(因为ServiceHostIDisposable并且它正确地处理状态(如果有时你不期望调用操作 - 任何一个软件都会有bug)。

  

然后调用此服务在WPF应用程序中打开一个屏幕

WPF创建的代码可以与WinForms中的方式相同或多或少地调用。例如,您仍然可以进行new MainWindow().Show()通话。所以只需将此类代码添加到您的服务实现中即可。

答案 1 :(得分:1)

是的,您可以在WinForms和WFP应用程序中托管WCF服务 - MSDN contains some sample。根据您托管服务的方式,您必须以不同方式处理UI交互 - 在UI和其他线程中托管之间存在差异,因为其他线程无法直接访问UI控件。