从主机 WinForms 程序访问自承载 WCF 服务

我创建了一个 Windows 窗体应用程序来运行 WCF 服务,该服务基本上完全由在同一台机器上运行的单个软件使用,我还希望托管应用程序充当“仪表板”,将显示为透明起见,有关请求的相关状态更新。然而,尽管 Windows 窗体应用程序用于启动和停止服务,但我无法以任何其他有意义的方式与其交互。

一些笔记/我尝试过的:

  • 该服务只能由一个程序访问(可能除了托管程序)

  • 该服务设置为使用 InstanceContextMode.Single,但 ServiceHost 对象的 SingletonInstance 属性始终为空。

  • 将服务引用添加到它自己的托管服务会导致主机程序无响应(可能不是意外)。

我为含糊不清表示歉意,但我基本上尝试访问服务对象,然后访问服务本身。我错过了什么还是有更好的方法来做到这一点?

谢谢,

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");

    }


aluckdog
浏览 169回答 1
1回答

天涯尽头无女友

已编辑的原始帖子中概述的解决方案 - 将主机窗口的引用设置为主机窗口类的静态成员。
打开App,查看更多内容
随时随地看视频慕课网APP