从主机WinForms程序访问自托管WCF服务

时间:2018-07-31 01:12:31

标签: c# winforms wcf self-hosting

我已经创建了一个Windows Forms应用程序来运行WCF服务,该服务基本上将完全由在同一台计算机上运行的单个软件所消耗,并且我也希望托管应用程序充当“仪表板”为了透明起见,它将显示有关传入请求的相关状态更新。但是,尽管使用Windows Forms应用程序启动和停止该服务,但我无法使其以任何其他有意义的方式与之交互。

一些笔记/我尝试过的事情:

  • 该服务只能由一个程序访问(也许不是托管程序)
  • 该服务设置为使用InstanceContextMode.Single,但是ServiceHost对象的SingletonInstance属性始终为null。
  • 为其自身的托管服务添加服务引用会导致宿主程序无响应(可能不会意外)。

我对此含糊其词表示歉意,但基本上来说,我在访问服务对象以及服务本身方面先后采取了行动。我是否缺少某些东西,或者有完全更好的方法吗?

谢谢

GBB

编辑:为清楚起见,我提出了解决方案-将宿主窗口引用设置为服务可访问的宿主窗口类的静态成员。

public partial class frmMainWindow : Form
{
    public static frmMainWindow CurrentInstance;
    ServiceHost serviceHost;        

    public frmMainWindow ()
    {
        InitializeComponent();
        CurrentInstance = this;            
    }

    void StartService()
    {
        // service host stuff here for starting TestServer service
    }

    void StopService()
    {
        // stop the service
    }

    // update the status textbox in the host form
    public void SetStatus(string status)
    {
        textStatus.Text = status;
    }



[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class TestServer : ITestServer
{
    frmMainWindow HostWindow = null;

    public TestServer ()
    {
        HostWindow = frmMainWindow .CurrentInstance;
        HostWindow.SetStatus("Service started");
    }

1 个答案:

答案 0 :(得分:0)

编辑后的原始帖子中概述的解决方案-将对宿主窗口的引用设置为宿主窗口类的静态成员。