2012-01-13 107 views
1

有一個用C++編寫的COM服務器。一般來說,它可以正常工作,但有時在少數客戶中會出現奇怪的問題客戶端(GUI應用程序)向服務器發送檢索或保存某些業務的請求。如果客戶遇到任何問題,他們還會向服務器發送請求以記錄錯誤。在奇怪的情況下,客戶端會收到一個COM異常「沒有足夠的存儲空間可用於完成此操作」,將錯誤消息發送到服務器並自行關閉(它已被編程爲在發生此類異常後關閉自身以關閉)。服務器在沒有問題的情況下記錄消息,但在一段時間沒有正常工作之後。它僅響應一些請求(未找到任何模式)。服務器機器和客戶機具有足夠的內存和CPU能力(問題出現時也是如此)。重新啓動服務器可解決所有問題(直到下一次出現通常在幾天內發生)。COM服務器的奇怪行爲

有人知道我是什麼問題嗎?

預先感謝您 盧卡斯

+0

你聲稱服務器有足夠的內存,但不知道你是如何知道這是真的。知道服務器是以32位還是64位運行會很有用。在32位內存碎片可能是一個問題。 – morechilli 2012-01-13 15:19:17

回答

2

這是迄今爲止的信息太少準確判斷問題的原因。當然,線程問題可能會導致這種情況,但有幾十個類似的原因可能會有相同的結果。

在幕後,這是HRESULT: 0x8007000E (E_OUTOFMEMORY)。問題是誰產生了這個結果;它是COM互操作還是您的服務器代碼?

+0

它不會被服務器代碼拋出,所以它必須是COM。 – GUZ 2012-01-13 15:24:57

+0

好吧,例如,可能是一個未終止的字符串,或者長度不正確的數組(例如,在之前的錯誤中設置爲-1)。我們無法從這個問題中得出結論。 – MSalters 2012-01-16 09:16:12