WCF服务上的“线程正在中止”

时间:2016-02-16 14:11:55

标签: c# multithreading wcf service abort

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

  

WCF服务

[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();
}

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

  1. 有没有人知道为什么会这样?
  2. 除了切换到Windows服务之外,还有更好的方法来实现我想要存档的内容吗?

1 个答案:

答案 0 :(得分:0)

看来它的Mcafee杀毒软件就是在访问hash.web文件之后。确认过程监视器。去搞清楚..... 有关详情,请查看this帖子。类似于我的问题。