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 に答える