从主机 WinForms 程序访问自托管 WCF 服务
Posted
技术标签:
【中文标题】从主机 WinForms 程序访问自托管 WCF 服务【英文标题】:Accessing a Self-Hosted WCF Service From the Host WinForms Program 【发布时间】:2019-01-07 07:22:42 【问题描述】:我创建了一个 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");
【问题讨论】:
总的来说,这不是一个糟糕的问题,但如果没有您的代码和配置,几乎不可能弄清楚。我建议你从头开始学习一些自托管教程,至少得到一些你可以玩的东西。或者,如果您选择,使用客户端和主机的所有相关代码和设置更新此问题。但是我真的会建议选项 A。因为它太宽泛了,不可能知道你做错了什么或错过了什么 很公平 - 我在原始问题中添加了更多内容,包括我根据相关链接找到的解决方案(当然,在提出问题之前我找不到)。 【参考方案1】:已编辑的原始帖子中概述的解决方案 - 将对主机窗口的引用设置为主机窗口类的静态成员。
【讨论】:
以上是关于从主机 WinForms 程序访问自托管 WCF 服务的主要内容,如果未能解决你的问题,请参考以下文章