프로그래밍 방식으로 원격 (개인) msmq를 들여다 볼 수 없음 : 메시지 큐 시스템에 대한 액세스가 거부되었습니다.

drs9222

원격 개인 대기열의 메시지를 엿보는 데 문제가있는 매우 간단한 콘솔 앱이 있습니다.

var queues = MessageQueue.GetPrivateQueuesByMachine(machineName);
var queue = queues.Where(x=>x.FormatName == queueName).Single();
Message message = queue.Peek();

Peek 호출이 "Message Queuing 시스템에 대한 액세스가 거부되었습니다"라는 MessageQueueException과 함께 실패합니다.

동일한 클라이언트 컴퓨터와 사용자를 사용하여 큐 탐색기와 메시지 큐 스냅인을 사용하여 큐를 볼 수 있습니다.

로컬 큐로 실험 해보면 큐에 대한 Peek 권한을 제거하여 오류를 재현 할 수 있지만 다른 도구에서도 중지됩니다.

여기에 설명 된 문제를 지적하는 많은 정보를 보았습니다 .

하지만 그 중 하나라도 문제가된다면 다른 도구로는 할 수 없을 것 같습니다.

편집 자격 증명을 변경하지 않고 MSMQQueueInfo / MSMQQueue COM 개체를 사용하여이 작업을 수행 할 수있었습니다 . .NET 라이브러리를 사용하여 작동하도록 만들 수 있으면 좋겠지 만 적어도 해결 방법이 있습니다.

drs9222

내 문제는 GetPrivateQueuesByMachine큐를 가져 오는 데 사용될 SendAndReceive내가 가진 것보다 더 많은 권한을 요청 하는 액세스 모드를 사용한다는 것 입니다. AccessMode를 지정하려면 MessageQueue 생성자를 사용해야했습니다. (이 경우 Peek입니다.)

결국 다음과 유사한 코드를 사용하여이 작업을 수행 할 수있었습니다.

var queue = new MessageQueue(@"FormatName:DIRECT=OS:machineName\private$\queueName", QueueAccessMode.Peek);
Message message = queue.Peek();

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사