2012-01-13 3 views
1

C++로 작성된 COM 서버가 있습니다. 일반적으로 잘 작동하지만 때로는 소수의 고객에게는 이상한 문제가 있습니다. 클라이언트 (GUI 응용 프로그램)는 서버로 일부 비즈니스 검색 또는 저장 요청을 보냅니다. 클라이언트에 문제가 발생하면 오류를 로그하기 위해 서버에 요청을 보냅니다. 이상한 상황에서 클라이언트는 "이 작업을 완료하는 데 사용할 수있는 저장소가 부족합니다"라는 COM 예외를 가져오고 서버에 오류 메시지를 보내고 자체를 닫습니다. 예외가 발생하면 닫히도록 프로그램되었습니다. 서버는 문제없이 메시지를 기록하지만 제대로 작동하지 않는 경우가 있습니다. 일부 요청에만 응답합니다 (패턴을 찾을 수 없음). 서버 시스템과 클라이언트 시스템에는 충분한 메모리와 CPU 전원이 있습니다 (문제가있는 경우에도 마찬가지 임). 서버를 다시 시작하면 모든 문제가 해결됩니다 (보통 며칠 이내에 나타나는 다음 번 모습).COM 서버의 이상한 동작

누군가 내가 어떤 문제인지 아는 사람이 있습니까?

이 훨씬 정확하게 문제의 원인을 결정하기 너무 적은 정보입니다 사전 루카스

+0

서버에 충분한 메모리가 있다고 주장하지만 이것이 사실이라는 것을 알지 못합니다. 서버가 32 비트 또는 64 비트로 실행되는지 여부를 확인하는 것이 유용합니다. 32 비트 메모리에서는 조각화가 문제가 될 수 있습니다. – morechilli

답변

2

에 감사드립니다. 물론 스레딩 문제로 인해 문제가 발생할 수 있지만 비슷한 결과가 발생할 수있는 유사한 원인이 수십 가지 있습니다.

뒤에서는 HRESULT: 0x8007000E (E_OUTOFMEMORY)입니다. 문제는이 결과를 누가 생성하는지입니다. COM interop 또는 서버 코드입니까?

+0

서버 코드에 의해 throw되지 않기 때문에 COM이어야합니다. – GUZ

+0

글자 그대로 마샬링되지 않은 종료 문자열이나 잘못된 길이의 배열 (예 : 이전 오류 일 경우 -1로 설정)이 될 수 있습니다. 우리는 그 질문에서 정말로 말할 수 없습니다. – MSalters