WCF功能返回后继续

时间:2012-11-28 22:21:19

标签: c# asp.net wcf methods

我有一个通过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 个答案:

答案 0 :(得分:3)

我要做的是将额外的工作放在另一个功能中。然后,在从WCF函数返回之前,为额外的工作函数创建一个新线程并运行它。

答案 1 :(得分:2)

您可以按照建议创建新线程,但如果您正在进行的工作将长时间运行,那么您很可能会从ASP.NET线程池中获取线程。这可能会导致应用程序的吞吐量降低。

所以,我可能会有另一个进程,也许是一个Windows服务,你的WCF应用程序可以调用它来执行更多的工作。这将使处理面向前方的请求与后台工作的问题脱钩。

答案 2 :(得分:1)

在另一个线程中执行工作或在服务器端引发事件,由另一个类/方法捕获。

答案 3 :(得分:1)

Task.Factory.StartNew(() => DoWork());

但是您可能遇到的一个问题是您关闭了线程,然后IIS会终止您的WCF服务。这当然是假设您在ISS中运行它。