从自己的类构造函数启动WCF

本文关键字:启动 WCF 构造函数 自己的 | 更新日期: 2023-09-27 18:08:48

我有一个自托管的命名管道(不使用http) wcf托管在类库中。我能够通过在类库中使用以下方法启动WCF:

ServiceHost serviceHost;
public void startService()
{
    // Create the service host
    ...
    // Open Service Host
    serviceHost.Open();
}

然后从一个winforms测试程序中运行以下命令,从一个按钮点击:

MyClassLib.MySvc testSvc;
private void button2_Click(object sender, EventArgs e)
{
    testSvc = new MyClassLib.MySvc();
    testSvc.startService();
}

这将正确启动WCF在类库中运行。

但是这需要引用类库的winforms调用startService方法。

我想要的只是能够在对运行WCF的类库的引用完成后立即启动服务。

我试图在类库服务的构造函数中添加以下内容:
public MySvc()
{
    startService();
}

然后从winforms实例化:

MyClassLib.MySvc testSvc;
private void button2_Click(object sender, EventArgs e)
{
    testSvc = new MyClassLib.MySvc();
    //testSvc.startService();  //No need to call this
}

如果我调试代码,我可以看到它实际上在这一点上中断了:

public MySvc()
{
    startService();  // It does run this but service does not start
}

但是这不会运行服务。如有任何帮助,不胜感激。

注释#1:我相信这是某种类型的定时问题,它不允许您在构造函数方法期间启动服务,但不确定。

从自己的类构造函数启动WCF

问题解决了,是的,我假设这是一个时间问题(见上面的注释# 1)是正确的!

复制,修改如下:

public MySvc()
{
    startService();  // It does run this but service does not start
}

这个问题解决了:

public void delayStartService()
{
    Task.Delay(1000).ContinueWith(t => startService());
}
public MySvc()
{
    delayStartService();
}