C# &引用;“线程正在中止”;关于WCF服务

C# &引用;“线程正在中止”;关于WCF服务,c#,multithreading,wcf,service,abort,C#,Multithreading,Wcf,Service,Abort,我们正在尝试开发一个WCF服务来执行长时间运行的任务。实现长时间运行任务的方法生成一个新任务,如果任务已成功排队,则该方法将立即返回到客户端(在本例中为.aspx页面)。该服务在其自己的应用程序池上运行,没有回收和单InstanceContextMode WCF服务 现在的问题是,在执行testThreadAbortException方法时,我捕获了线程被中止的异常(这总是在客户端退出事件处理程序方法之后发生)。奇怪的是,这个异常只在第一次抛出(即,如果我再次按下run按钮,代码执行良好)。我必

我们正在尝试开发一个WCF服务来执行长时间运行的任务。实现长时间运行任务的方法生成一个新任务,如果任务已成功排队,则该方法将立即返回到客户端(在本例中为.aspx页面)。该服务在其自己的应用程序池上运行,没有回收和单InstanceContextMode

WCF服务

现在的问题是,在执行testThreadAbortException方法时,我捕获了线程被中止的异常(这总是在客户端退出事件处理程序方法之后发生)。奇怪的是,这个异常只在第一次抛出(即,如果我再次按下run按钮,代码执行良好)。我必须重新启动本地IIS才能再次复制错误

  • 有人知道为什么会这样吗
  • 除了切换到windows服务之外,还有没有更好的方法来实现我要归档的内容

  • 在访问hash.web文件之后,它的Mcafee antivirus似乎已经停止了。与过程监视器确认。想想看。。。。。
    欲了解更多信息,请查看帖子。问题与我的类似。

    因为在访问hash.web文件之后,似乎它的Mcafee antivirus。与过程监视器确认。想想看。。。。。
    欲了解更多信息,请查看帖子。问题与我的问题类似。

    您是否正在采取措施使IIS工作人员被回收利用?这听起来像是appdomain卸载。这个线程池任务被中止没有其他原因。不,我不这么认为。客户端回收选项是否会以任何方式影响服务的应用程序池?Ok@usr您是对的。经过进一步调查,运行wcf服务的appdomain似乎正在卸载。实际原因是:“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\iishost\U wcf\U etlschedulerservice\fad2fd98\ca78657a\hash\hash.web HostingEnvironment启动关机HostingEnvironment导致关机”。如果您对此有任何评论,我们将不胜感激……看起来好像有什么东西写入了应用程序,导致它被回收。这可能是代码中的一个bug。您可以使用procmon.exe捕获有问题的处理。您是否正在采取任何措施使IIS工作进程被回收?这听起来像是appdomain卸载。这个线程池任务被中止没有其他原因。不,我不这么认为。客户端回收选项是否会以任何方式影响服务的应用程序池?Ok@usr您是对的。经过进一步调查,运行wcf服务的appdomain似乎正在卸载。实际原因是:“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\iishost\U wcf\U etlschedulerservice\fad2fd98\ca78657a\hash\hash.web HostingEnvironment启动关机HostingEnvironment导致关机”。如果您对此有任何评论,我们将不胜感激……看起来好像有什么东西写入了应用程序,导致它被回收。这可能是代码中的一个bug。您可以使用procmon.exe捕获有问题的处理
    [OperationContract]
    public bool testThreadAbortException()
    {           
        Task.Factory.StartNew
        (
            () =>
            {                         
                try
                {
                    //long operation
                    int i = 0;
                    while (i < 250)
                    {         
                        int j = 0;
                        while (j < 2000000) j++;
                        i++;
                    }
                    ThreadState state = Thread.CurrentThread.ThreadState;
                    string  dummy = "finished ";
                }
                catch(Exception exception)
                {
                    ThreadState state = Thread.CurrentThread.ThreadState;
                    string msg = exception.Message;
                    Exception inner = exception.InnerException;                        
                }
            }
       );
    
       return true;                       
    }
    
    protected void btnRun_Click(object sender, EventArgs e)
    {
        _default.IISHOST_ETLSchedulerServiceReference.ETLSchedulerServiceClient client = new _default.IISHOST_ETLSchedulerServiceReference.ETLSchedulerServiceClient();
        bool ret = client.testThreadAbortException();
    }