【问题标题】:WCF Function Continue after returnWCF函数返回后继续
【发布时间】:2012-11-28 22:21:18
【问题描述】:

我有一个通过 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);

       }       

【问题讨论】:

    标签: c# asp.net wcf methods


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:
          Task.Factory.StartNew(() => DoWork());
          

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

          【讨论】:

          • 当 WCF 服务调用完成时,是的,该线程可以返回到线程池,但这不会对线程处理有任何影响DoWork()
          • 我在考虑 IIS 工作进程回收。然后 IIS 可以终止工作进程并且线程终止。 stackoverflow.com/questions/2675910/…
          猜你喜欢
          • 1970-01-01
          • 2021-08-02
          • 1970-01-01
          • 2020-10-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-09
          • 2017-11-21
          相关资源
          最近更新 更多