none
webservice执行代码里,可以在多线程里使用Trace输出吗? RRS feed

  • 问题

  • 大概意思是:

    我在一个网站的webservice函数里使用了子线程,让公开的函数早点结束返回,主要工作由子线程完成。

    子线程里,调用了TraceContext来输出消息(我把webconfig配置了下,输出到System.Diagnosis.Trace的输出中),每次执行到子线程输出消息时,都会抛出ArgumentException,值不在预期范围内。

    如果用把子线程的方法拿出来,用主线程同步执行的话,就不会有问题。

    我不太熟悉webservice的生命周期,不知道为什么不能这么搞呀?

    以下是代码:

    public class MyService : System.Web.Services.WebService 
    {
              TraceContext webTrace;
               public MyService()
               {
                        webTrace = new TraceContext(base.Context);
                        webTrace.IsEnabled = true;
               }
    
              [WebMethod]
              public void Publish(int id)
              {
                     ThreadPool.QueueUserWorkItem(new WaitCallback(publishAsync),id);
             }
    
             private void publishAsync(object stateInfo)
             {
                    webTrace.Write("测试消息");
            }
    }




    2014年5月26日 11:40