子线程在Web服务调用中创建后停止

时间:2012-12-21 21:40:07

标签: c# multithreading web-services

我有一个web服务,在调用时会生成一个子线程。子线程本身有一个控制循环,应该运行,直到它被告知将来某个时候终止。

我使用以下代码:

namespace MyService
{
    public class MyService : IMyService
    {
        // Starts a new worker loop on a new thread
        public bool startMyProcess(string Name, Guid ID)
        {
                try
                {
                    // Get DB connection
                    string dbConn = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
                    TManagement tManagement = new TManagement(dbConn);

                    // If a valid ID has been entered, create a new thread
                    if (tManagement.validateID(ID) == 0)
                    {
                        MainLoop myWorker = new MainLoop();
                        Thread bw = new Thread(() => myWorker.startWebServiceLoop(Name, ID));
                        bw.Start();
                        return true;
                    }
                    else
                    {
                        return false; // The ID is invalid
                    }
                }
                catch
                {
                    // An error has occurred
                    return false;
                }
        }
    }
}

然而,在几次成功的循环(做同样的事情)之后,线程“bw”终止。

我希望这个子线程能够无限期地继续下去。我怀疑,一旦webservice线程终止,子生成的线程就会被杀死。有没有办法避免这种情况?

1 个答案:

答案 0 :(得分:1)

更好的设计是使用Windows服务来托管长时间运行的线程。您的Web服务可以通过Windows服务托管的小型WCF服务与Windows服务进行通信。

Windows服务中的线程可以持续所需的时间。 Web服务是针对请求/响应范例而设计的,听到它并不总是跟踪由于客户请求而不直接发生的事情,我并不感到惊讶。