代码之家  ›  专栏  ›  技术社区  ›  Nathan

在另一个线程中使用SSRS Web服务

  •  0
  • Nathan  · 技术社区  · 17 年前

    我使用的代码看起来像这样:

    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错误。我认为证书没有正确传递的问题。即这行代码:

    rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
    

    有人知道可能会发生什么吗?

    1 回复  |  直到 17 年前
        1
  •  3
  •   TristanK    17 年前

    当主线程执行时,它会为它准备一个模拟上下文。在经过身份验证的场景中,IIS已经对用户进行了身份验证,然后为该用户设置了线程令牌,而不是进程令牌。

    授权

    但是,如果你在没有任何身份信息的情况下剥离一个工作线程,那么该工作线程将在没有自己的令牌的情况下生成,因此它将使用进程令牌。

    如果你能在初始线程上做你需要做的事情,那么你就没有委托问题,只是工作线程上缺少用户令牌。

    Link

    http://aspalliance.com/articleViewer.aspx?aId=650&pId=2

    推荐文章