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 线程池中获取线程。这可能会导致应用程序的吞吐量下降。

所以,我可能会有另一个进程,也许是一个 Windows 服务,您的 WCF 应用程序可以调用它来执行更多工作。这将使关注点与处理前端请求和后台工作脱钩。

于 2012-11-28T22:28:42.507 回答
1

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

于 2012-11-28T22:29:32.817 回答
1
Task.Factory.StartNew(() => DoWork());

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

于 2012-11-28T22:31:18.107 回答