我從asp.net應用程序中調用SQL Server Reporting Services Webservice。我需要關閉某個報告的所有訂閱。但我不希望用戶不得不等待所有事情發生,因此我希望將所有webservice調用放在單獨的線程中,並立即返回給用戶。在另一個線程中使用SSRS Webservice
我使用的代碼看起來是這樣的:
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
使用線程失敗,出現401錯誤。我相信憑證的問題沒有得到正確的傳遞。即這行代碼在這裏:
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
我沒有憑據如何緩存的作品有很好的理解,所以我想不通爲什麼它不喜歡在一個單獨的線程之中。
我已經嘗試在外部函數中抓取憑據,並將它們作爲參數傳遞,但發生同樣的錯誤。
有沒有人有任何想法可能發生什麼?
哦男人。這是一個很好的答案!我希望我能給你1票以上的票數。謝謝! – Nathan 2009-03-05 07:11:38