从主机 WinForms 程序访问自承载 WCF 服务
Accessing a Self-Hosted WCF Service From the Host WinForms Program
我已经为 运行 WCF 服务创建了一个 Windows Forms 应用程序,该服务基本上完全由同一台机器上 运行 的单个软件使用,并且我还希望托管应用程序充当 "dashboard",为了透明起见,它会显示有关收到的请求的相关状态更新。然而,尽管 Windows Forms 应用程序用于启动和停止服务,但我无法让它以任何其他有意义的方式与之交互。
一些 notes/what 我试过:
- 该服务只能由一个程序访问(可能不是托管程序)
- 服务设置为使用InstanceContextMode.Single,但ServiceHost对象的SingletonInstance属性始终为null。
- 添加对其自身托管服务的服务引用导致宿主程序无响应(可能并非意外)。
对于含糊其词,我深表歉意,但我基本上是尝试访问服务对象,然后是服务本身。我是不是遗漏了什么或者是否有更好的方法来做到这一点?
谢谢,
GBB
编辑:为清楚起见/我最终采用的解决方案 - 将主机 window 引用设置为主机 window 的 class 的静态成员,可由服务。
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");
}
已编辑的原始解决方案 post - 将对主机 window 的引用设置为主机 window 的 class 的静态成员。
我已经为 运行 WCF 服务创建了一个 Windows Forms 应用程序,该服务基本上完全由同一台机器上 运行 的单个软件使用,并且我还希望托管应用程序充当 "dashboard",为了透明起见,它会显示有关收到的请求的相关状态更新。然而,尽管 Windows Forms 应用程序用于启动和停止服务,但我无法让它以任何其他有意义的方式与之交互。
一些 notes/what 我试过:
- 该服务只能由一个程序访问(可能不是托管程序)
- 服务设置为使用InstanceContextMode.Single,但ServiceHost对象的SingletonInstance属性始终为null。
- 添加对其自身托管服务的服务引用导致宿主程序无响应(可能并非意外)。
对于含糊其词,我深表歉意,但我基本上是尝试访问服务对象,然后是服务本身。我是不是遗漏了什么或者是否有更好的方法来做到这一点?
谢谢,
GBB
编辑:为清楚起见/我最终采用的解决方案 - 将主机 window 引用设置为主机 window 的 class 的静态成员,可由服务。
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");
}
已编辑的原始解决方案 post - 将对主机 window 的引用设置为主机 window 的 class 的静态成员。