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

时间:2016-09-26 16:08:22

标签: c# wcf

我有一个托管在类库中的自托管命名管道(不使用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 :我相信它的某种类型的计时问题,它不允许您在构造函数方法期间启动服务但不确定。

1 个答案:

答案 0 :(得分:1)

问题已解决,是的我认为这是一个时间问题(参见上面的注意#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();
}