WCF服务 - 使用工作线程自动调用方法

时间:2014-05-09 18:15:58

标签: c# multithreading wcf

我有一个非常简单的WCF服务,它只能作为计算器添加两个数字。

[ServiceContract(Namespace = "Calculating")]
public interface ICalculator
{
    [OperationContract]
    double Add(double n1, double n2);
}

// Implementation of the ICalculator interface.
public class CalculatorServer : ICalculator
{
    public double Add(double n1, double n2)
    {
        double result = n1 + n2;
        return result;
    }
}

同样,我有一个非常简单的WCF客户端,它使用ChannelFactory调用Calculator接口。

var endpointAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/service");
var factory = new ChannelFactory<ICalculator>(new WSHttpBinding(), endpointAddress);
ICalculator proxy = factory.CreateChannel();

Console.WriteLine(proxy.Add(5, 3));

factory.Close();

这段代码工作正常,但是我正在努力创建一个方法,一旦服务启动,该方法将使用工作线程自动被接口调用。我想要做的是,当主线程收到计算器的请求时,工作线程将每五秒打印一条消息。所以我尝试在我的接口实现中添加一个构造函数来调用这个方法:

private bool isAlive;

public CalculatorServer()
{
   isAlive = true;
   // Queue the main service function for execution in a worker thread.
   ThreadPool.QueueUserWorkItem(new WaitCallback(ServiceWorkerThread), isAlive);
}

private void ServiceWorkerThread(object state)
{
    isAlive = (bool)state;

    // Periodically check if the service is stopping.
    while (this.isAlive)
    {
         Console.WriteLine("This is a message!");
         Thread.Sleep(5000); // sleep for five seconds
    }
}

但是当我运行我的客户端时,消息不会显示。起初我以为是因为构造函数由于某种原因没有被调用,但是在初始化double并稍后在Add方法中使用它之后我知道事实并非如此。那么我做错了什么?请记住,我对WCF和多线程仍然相当新。

0 个答案:

没有答案
相关问题