簡體   English   中英

從WCF服務訪問QuickBook時,在QBUtilities.dll中找不到AccessExceptionViolation,SEHException和/或Procedure入口點

[英]AccessExceptionViolation, SEHException, and/or Procedure entry point not found in QBUtilities.dll when accessing QuickBooks from a WCF Service

我有一個WCF服務(實際上是幾個),由WPF應用程序調用,全部在.NET 4.0下。 使用nsoftware(QuickBooks SDK的.NET包裝庫)中的QuickBooks Integrator 5.0,我的大多數例程都能正常工作。 但是,當其中一些是從新線程運行的,並且出現錯誤,尤其是無法打開QuickBooks文件的錯誤時,我會遇到各種各樣的奇怪錯誤,包括SEHException,兩者均為“無效的arg狀態” util”和QBUtilities.dll中的“找不到過程入口點”以及訪問異常沖突。

例如,當直接從客戶端調用該例程時,該例程將按預期工作。 假設我故意加載了錯誤的QuickBooks文件(這意味着QuickBooks無法打開我的應用程序期望的文件;一個致命的可捕獲錯誤)並調用它:

GetCustomerWithQB(int CustID)
{
 .. set up code
 ..
 try {
   ..
   ..
   toReturn.QBCustomer.QBCustomer.Get(QuickBooksId); // this goes to QB to do the fetch
 }
 catch (nsoftware.InQB.InQBException x)
 { 
   // we get, correctly, a 602 "there is a different file open" error.
 }
} 

但是,如果我從服務中調用該例程,則會生成一個新線程:

Task.Factory.StartNew(delegate { GetCustomerWithQB(CustID); });

然后我得到上面的各種錯誤。 GRRRR。 救命?

經過大量調試和一天的研究之后,結果發現只有一次調用兩個例程時,我才得到奇怪的錯誤。 這導致我研究了許多途徑,其中最有用的就是這個問題 最重要的是,我創建了一個靜態單線程StaTaskScheduler(來自Microsoft的Parallel Extensions庫):

_staSchedulerForQBCalls = new StaTaskScheduler(numberOfThreads:1);

並將其用於所有調用QuickBooks的任務:

Task.Factory.StartNew(delegate { GetCustomerWithQB(CustID); }, CancellationToken.None, TaskCreationOptions.None, _staSchedulerForQBCalls);

正如這些事情通常所做的那樣,事后看來似乎是顯而易見的,但是奇怪的錯誤和問題的局限性肯定一開始並沒有使我朝這個方向發展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM