我使用的代码看起来像这样:
public static void FireAllAsync(string ReportPath) { Hashtable paramValues = new Hashtable(); ThreadPool.QueueUserWorkItem(new WaitCallback(FireAll), ReportPath); } public static void FireAll(object ReportPath) { ReportingService rs = new ReportingService(); rs.Credentials = System.Net.CredentialCache.DefaultCredentials; Subscription[] SubList = rs.ListSubscriptions((string)ReportPath, null); foreach (Subscription CurSub in SubList) { rs.FireEvent(CurSub.EventType, CurSub.SubscriptionID); } }
召唤 FireAll FireAllAsync 使用Thread失败,出现401错误。我认为证书没有正确传递的问题。即这行代码:
FireAll
FireAllAsync
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
有人知道可能会发生什么吗?
当主线程执行时,它会为它准备一个模拟上下文。在经过身份验证的场景中,IIS已经对用户进行了身份验证,然后为该用户设置了线程令牌,而不是进程令牌。
授权
但是,如果你在没有任何身份信息的情况下剥离一个工作线程,那么该工作线程将在没有自己的令牌的情况下生成,因此它将使用进程令牌。
如果你能在初始线程上做你需要做的事情,那么你就没有委托问题,只是工作线程上缺少用户令牌。
Link
http://aspalliance.com/articleViewer.aspx?aId=650&pId=2