【问题标题】:Running a WCF listener in a WPF application在 WPF 应用程序中运行 WCF 侦听器
【发布时间】:2011-05-30 07:58:22
【问题描述】:

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

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

【问题讨论】:

    标签: wpf wcf


    【解决方案1】:

    是否可以在 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),并且它可以正确处理状态(以防有时会在您不期望的情况下调用操作 - 任何软件中总是存在错误)。

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

    WPF 创建的代码可以像在 WinForms 中那样或多或少地调用。例如,您仍然可以拨打new MainWindow().Show() 电话。因此,只需将此类代码添加到您的服务实现中即可。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-15
        • 2010-11-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多