2011-08-16 2 views
3

나는 프로듀서와 소비자가 모두 같은 컴퓨터에있을 때 매우 잘 작동하는 MSMQ를 사용하는 응용 프로그램을 가지고 있습니다.Message Queue에서 메시지를 보낸 위치는 어디입니까?

어제, 처음으로 별도의 컴퓨터에서 실행되는 다른 제작자를 만들려고했습니다. 큐는 개인 큐, 그리고 이전에, 양쪽 내가 원격 시스템에서이 큐를 참조하는 여러 가지 방법을 시도

string strQueueName = ".\Private$\MyQueue"; 

로 참조. 내 서버 이름은 그래서 난

string strQueueName = "groucho\Private$\MyQueue"; 

을 시도했지만이 일관되게 "잘못된 큐 경로 이름"예외를 던졌다 "그루"입니다. 내가 할로 이 메시지가 표시되지, 중,

string strQueueName = "FORMATNAME:DIRECT =OS:grouch\\private$\\SDVQueue"; 

이 더 이상 예외가 발생하지만 작동하지 않습니다

동료 개발자는 내가 예외를 방지 다음을 시도 제안 대기열에 있습니다.

서버는 Windows Server 2008 R2입니다. "Everyone"이 Receive and Peek는 가능하지만 Send는 할 수 없지만 "Send"를 추가하려고하면 에 "보안 설명자가 설정 될 수 없습니다."라는 오류 대화 상자가 나타납니다. , 오류 : 액세스가 거부되었습니다. " I do이이 상자에 관리자 권한이 있습니다.

나는 모든 종류의 보안이 있다는 것을 알기 때문에 보안 문자가 있지만 보낸 사람이나 호스트 컴퓨터의 이벤트 로그에는 오류가 표시되지 않습니다.

보안 문제인 경우 문제점을 어떻게 확인할 수 있습니까?

감사합니다. 여기

는 전체 테스트 코드입니다 : 당신은 하나 개의 서버에서 메시지를 보낸 다음 아웃 바운드 큐를 보면

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Messaging; 

namespace RemoteQueue 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     string name = "FORMATNAME:DIRECT =OS:groucho\\private$\\SDVQueue";; 
     string input = null; 
     MessageQueue queue = null; 

     try 
     { 
     queue = new MessageQueue(name); 
     string key = "key"; 

     for (int i = 0; i < 200; i++) 
     { 
      Message msgToSend = new Message(); 
      string value = "value_" + i; 

      msgToSend.Body = string.Format("{0},{1}", key, value); 

      Console.WriteLine("Sending message " + i); 
      queue.Send(msgToSend, "otherpart"); 
     } 

     } 
     catch (MessageQueueException me) 
     { 
     Console.WriteLine("ERROR: caught message queue exception: " + me.Message); 
     } 

     Console.WriteLine("Type any key to exit..."); 
     input = Console.ReadLine(); 

    } 
    } 
} 
+0

죽은 편지 큐의 메시지입니다 큐의 '모두를 완벽하게 제어'를 설정

시도? –

+0

방금 ​​확인했는데 데드 - 레터 큐에 아무것도 없습니다. –

답변

4

, 당신은 전달의 목적으로 생성 된 임시 큐를 볼 수 귀하 메시지. 대기열에서 메시지를 볼 수 있어야합니다.

이제 수신 서버로 이동하십시오.

큐에 대한 사용 권한을 설정하려면 해당 큐의 소유권을 가져와야합니다. 대기열 속성 -> 보안 탭 -> 고급 -> 소유자 탭 -> 소유자 변경 대상. 목록에 Windows 사용자가 표시됩니다.

이렇게하면 보내기 권한을 설정할 수 있습니다. 이 작업이 완료되면 보내는 서버의 아웃 바운드 대기열을 확인하면 이제 메시지가 전송 된 것입니다.

희망이 도움이됩니다.

1

다음을 예제에 추가하십시오. 데드 레터 대기열에 서버가 처리하지 않으면 대기열에 표시되어야합니다.

...

queue = new MessageQueue(name); 

queue.DefaultPropertiesToSend = new DefaultPropertiesToSend(); 

queue.DefaultPropertiesToSend.UseDeadLetterQueue = true; 

는 ....

0

은 MSMQ 서버의 보안 문제가 될 수 없습니다.

관련 문제