2010-06-09 86 views
3

我有一個要求來調用.NET Web服務(ASMX或WCF)一個DLL(非託管C)。.NET Web服務 - 如何調用非託管C DLL

從調用Web服務的dll很簡單,按預期工作。

然而,當我加載測試Web服務的問題出現。 (錯誤代碼0xC0000374 - 「一個內部錯誤,通常涉及堆損壞」)

我已經被dll的所有者告知dll在多線程環境中不可靠,如果有兩個或多個調用在同一時間被髮送。

在傳統的Windows應用程序,我想通過實現一個單獨的類來保護DLL處理這個。有沒有在Web服務實現實現這個建議的方法?

+2

請嘗試共享**儘可能多的細節**儘可能地。 「問題出現」 - 什麼樣的問題? – Andrey 2010-06-09 13:08:13

+1

我實在不明白模式是如何從單並行調用不同的線程來保護。 – 2010-06-09 13:12:43

+0

Andrey,問題更新了更多的信息。 – JohnC 2010-06-09 13:14:16

回答

3

如果您只需確保一次只有一個線程可以調用您的dll,則可以在lock語句中包裝對它的任何訪問權限:

public static class MyDllCalls 
{ 
    private static object _lockObject = new object(); 

    public static int SomeCall() 
    { 
     lock (_lockObject) 
     { 
      return CallSomeFunctionInYourDll(); 
     } 
    } 
} 

只有一個線程可以在給定的時間保持鎖定,所以這樣可以防止多個線程並行進行調用。

0

從多個線程調用平行同樣的方法,你可以使用一個locking mechanism預防。