2016-11-18 9 views
5

में एमएसएमक्यू का उपयोग करके प्रमाणीकरण अपवाद कतार विंडोज सर्वर में माइक्रोसॉफ्ट मैसेज कतार में नया है, अगर कर्मचारी एनआईएलएल है तो मुझे धक्का देना होगा।सी #

कर्मचारी मॉडल कक्षा

public class Employee 
{ 
    public string EmployeeID { get; set; } 
    public string EmployeeName { get; set; } 
} 

public void ValidationProcess(Employee emp) 
{ 
    if((emp != null) || (emp.EmployeeID == null)) 
    { 
     // Push into Validation Exception Queue using MSMQ 
    } 
} 

है एक बार डाटा कि मान्यता अपवाद कतार में धकेल दिया है, यह अलग प्रक्रिया द्वारा संसाधित किया जाना चाहिए। हर 1 ghante प्रक्रिया शुरू करने की जरूरत है और यह निम्नलिखित विधि

public void ValidationExceptionProcess(object obj) 
{ 
    // Some Inner Process 

    // Log the Error 
} 

कृपया मुझे गाइड कैसे बना सकते हैं और यह प्रक्रिया करने के लिए फोन करना चाहिए।

उत्तर

2

पहला चरण: स्थापित MSMQs एक खिड़कियों के रूप में सर्वर/पीसी पर सुविधा

तब:
- कतार बनाएं अगर यह
मौजूद नहीं है - कतार एसिंक्रोनस रूप
उपयोगी में संदेश पुश msmq से संदेश को आगे बढ़ाने और पुन: प्राप्त करने के लिए guide

कोड उदाहरण:

public class ExceptionMSMQ 
    { 
     private static readonly string description = "Example description"; 
     private static readonly string path = @".\Private$\myqueue"; 
     private static MessageQueue exceptionQueue; 
     public static MessageQueue ExceptionQueue 
     { 
      get 
      { 
       if (exceptionQueue == null) 
       { 
        try 
        { 
         if (MessageQueue.Exists(path)) 
         { 
          exceptionQueue = new MessageQueue(path); 
          exceptionQueue.Label = description; 
         } 
         else 
         { 
          MessageQueue.Create(path); 
          exceptionQueue = new MessageQueue(path); 
          exceptionQueue.Label = description; 
         } 
        } 
        catch 
        { 
         throw; 
        } 
        finally 
        { 
         exceptionQueue.Dispose(); 
        } 
       } 
       return exceptionQueue; 
      } 
     } 

     public static void PushMessage(string message) 
     { 
      ExceptionQueue.Send(message); 
     } 

     private static List<string> RetrieveMessages() 
     { 
      List<string> messages = new List<string>(); 
      using (ExceptionQueue) 
      { 
       System.Messaging.Message[] queueMessages = ExceptionQueue.GetAllMessages(); 
       foreach (System.Messaging.Message message in queueMessages) 
       { 
        message.Formatter = new XmlMessageFormatter(
        new String[] { "System.String, mscorlib" }); 
        string msg = message.Body.ToString(); 
        messages.Add(msg); 
       } 
      } 
      return messages; 
     } 

     public static void Main(string[] args) 
     { 
      ExceptionMSMQ.PushMessage("my exception string"); 

     } 
    } 


ऐसा करने के लिए एक अन्य व्यापक रूप से उपयोग किया जाने वाला तरीका बॉक्स लॉगर्स से भी उपयोग करना होगा जिसमें पहले से ही एंटरप्राइज़ लाइब्रेरी या एनएलओजी जैसी कार्यक्षमता शामिल है जो ऐसा करने के लिए आसान इंटरफेस प्रदान करती है।

संदेशों को पुनर्प्राप्त करने के लिए मैं एक अलग विंडोज सेवा की सिफारिश करता हूं जो समय-समय पर संदेशों को पढ़ता है और उन्हें संसाधित करता है। कि कैसे करना है पर एक अच्छा उदाहरण यहाँ दिया जाता है: Windows service with timer

अद्यतन: Windows सेवा उदाहरण:

MSMQConsumerService.cs

public partial class MSMQConsumerService : ServiceBase 
{ 
    private System.Timers.Timer timer; 

    public MSMQConsumerService() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     this.timer = new System.Timers.Timer(30000D); // 30000 milliseconds = 30 seconds 
     this.timer.AutoReset = true; 
     this.timer.Elapsed += new System.Timers.ElapsedEventHandler(this.ProcessQueueMessages); 
     this.timer.Start(); 
    } 

    protected override void OnStop() 
    { 
     this.timer.Stop(); 
     this.timer = null; 
    } 

    private void ProcessQueueMessages(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     MessageProcessor.StartProcessing(); 
    } 

} 

और MessageProcessor.cs

public class MessageProcessor 
    { 
     public static void StartProcessing() 
     { 
      List<string> messages = ExceptionMSMQ.RetrieveMessages(); 
      foreach(string message in messages) 
      { 
       //write message in database 
      } 
     } 
    } 
+0

क्या आप कृपया अपने उत्तर को संबंधित कोड के साथ विस्तारित कर सकते हैं। –

+0

@ बी बलामानिगंदन यहां आप साथी हैं। आपकी सहायता के लिए कुछ कोड जोड़ा गया। मुझे उम्मीद है कि चीजें अब और अधिक स्पष्ट हैं – Pan

+0

बहुत अच्छी ... मुझे विंडोज सेवा के माध्यम से रीडिंग विधि को कॉल करने की आवश्यकता है। इस सेवा को पढ़ने की विधि को निष्पादित करने के लिए कॉल शुरू करनी चाहिए। - कृपया उस हिस्से में अपना विचार साझा करें। –