1

我有一个 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”终止了。

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

4

1 回答 1

1

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

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

于 2012-12-21T22:36:54.900 回答