3

WCFを介してWindowsサービスに接続し、メソッドを呼び出すWebアプリケーションがあります。メソッドが結果を返した後(そしてすべてが成功した後-以下の行** ??を参照)、サービスを続行して他の作業を実行したいと思います。

これを行う最も簡単な方法は何ですか?

ありがとうダモ

C#コード

//Add Files To Control Manager
    public ReturnClass FilesToControl(List<Item> lstNewItems,string ReferenceNumber,string Type,String Description)
   {
       try
       {
           String ThisisAnItemToControl = "";
           String ThisIsItsType = "";

           for (int i = 0; i < lstNewItems.Count; i++) // Loop through List with for
           {
               ThisisAnItemToControl = lstNewItems[i].Paramater;
               ThisIsItsType = lstNewItems[i].Type;

               // Do a pre check on the item

               // Does File Exist

               if (!File.Exists(ThisisAnItemToControl))
                   return new ReturnClass(-1, ThisisAnItemToControl + " does not exist", String.Empty, null, null, null);  



           }

           return new ReturnClass(1, "", String.Empty, null, null, null);


           // Now that we have returned a result to the web application we can get to work and modify the items under control but how can i do this?

         //  **??


       }

       catch (Exception ex)
       {

           return new ReturnClass(-1, ex.Message.ToString(), "", null, null, null);

       }       
4

4 に答える 4

3

私がすることは、余分な作業を別の関数に配置することです。次に、WCF関数から戻る直前に、追加の仕事関数用の新しいスレッドを作成して実行します。

于 2012-11-28T22:24:48.630 に答える
2

提案されているように新しいスレッドを作成することもできますが、実行している作業が長時間実行される場合は、ASP.NETスレッドプールからスレッドを取得する可能性があります。これにより、アプリケーションのスループットが低下する可能性があります。

したがって、WCFアプリケーションがより多くの作業を実行するために呼び出すことができる別のプロセス(おそらくWindowsサービス)がおそらくあります。これにより、懸念事項が正面からの要求に対処することから、バックグラウンドの作業から切り離されます。

于 2012-11-28T22:28:42.507 に答える
1
Task.Factory.StartNew(() => DoWork());

ただし、発生する可能性のある問題の1つは、スレッドを起動すると、IISがWCFサービスを強制終了することです。もちろん、これはISSで実行していることを前提としています。

于 2012-11-28T22:31:18.107 に答える
1

別のスレッドで作業を行うか、別のクラス/メソッドによってキャッチされたサーバー側でイベントを発生させます。

于 2012-11-28T22:29:32.817 に答える