2015-01-02 2 views
0

IDE에서 읽은 메시지를 삭제 방지하는 것입니다 메시지에 그 함수가 준비가되지 않았다면 다른 함수를 호출 한 다음 메시지가 대기열에 있어야합니다.은 가능한 자동 후 MSMQ

내 MSMQ 수신 보내기 코드 : 당신은 내가 메시지를 다시 수신 메시지를 검증하고, 코드를받을에서 볼 수 있듯이

private void button1_Click(object sender, EventArgs e) 
    { 
     //MSMQ Send : 
     if (MessageQueue.Exists(@".\Private$\MyQ")) 
     { 
      myQ = new MessageQueue(@".\Private$\MyQ"); 
     } 
     else 
     { 
      myQ = MessageQueue.Create(@".\Private$\MyQ"); 
     } 

     string xmlText = getxmlString(); 

     System.Messaging.Message msg = new System.Messaging.Message(); 

     msg.Formatter = new XmlMessageFormatter(); 
     msg.Body = xmlText; 
     msg.Label = "MyXmlMessage"; 
     msg.Priority = MessagePriority.Normal; 
     myQ.Send(msg); 

    } 


private void button2_Click(object sender, EventArgs e) 
    { 
     //MSMQ Receive 
     myQ = new MessageQueue(@".\Private$\MyQ"); 

     System.Messaging.Message myMsg = myQ.Receive(); 
     myMsg.Formatter = new XmlMessageFormatter(new String[] { "System.String,mscorlib" }); 
     bool IsValidated = Validate(myMsg.Body.ToString()); 
    } 

    internal void Validate(string message) 
    { 
     //some logic 
     return false; 
    } 

는, 저는 여기에 해당 메시지가 큐에서 삭제하려는에만 IsValidated 경우 사실입니다,

기본적으로 나는 자동 삭제 메시지의 미래를 방지하고 유효성 검사가되면 대기열에서 해당 메시지를 삭제하려고합니다.

이 목표를 달성하기 위해 내가 어떤 수정을해야하는지 말해 줄 수 있습니까?

답변

1

Peek을 사용해 보셨습니까? (피킹)이 MessageQueue가 참조하여 큐에 제 1 메시지를 제거하지 않고

MessageQueue.Peek 방법

반환. Peek 메서드는 동기식이므로 메시지를 사용할 수있을 때까지 현재 스레드를 차단합니다.

나는 그것에 대해 알고하지 않습니다
+0

, 내가 – yogeshkmrsoni

+0

좋아요 그래서 슬쩍 방법이 유용 할 것이다 해보자하지만, 메시지는 예를 들어 수동 큐에서 해당 메시지를 삭제하는 방법을 확인하면 당신은 슬쩍 후 저를 알 수 있습니다. – yogeshkmrsoni

+0

그냥 평범한대로'Receive()'를 호출하십시오. – Neverever

0
messageQueue.Formatter = new XmlMessageFormatter(
    new Type[] { typeof(System.Xml.XmlElement) }); 
MessageEnumerator iter = messageQueue.GetMessageEnumerator2(); 
iter.Reset(); 
while (iter.MoveNext(new TimeSpan(1000))) 
{ 
    System.Messaging.Message msg = iter.Current; 

    msg.Formatter = new ActiveXMessageFormatter(); 
    var reader = new StreamReader(msg.BodyStream); 

    var msgBody = reader.ReadToEnd(); 
} 
+0

이 코드가 질문에 답하는 이유에 대한 설명에서 [편집] 해주십시오. 코드 전용 답변은 솔루션을 가르치지 않기 때문에 [낙담] (http://meta.stackexchange.com/q/148272/274165)입니다. –