Первый шаг: Установите MSMQs в качестве а окна имеют на сервере/ПК
Тогда:
- Создать очередь, если она не существует
- Push сообщения в очереди асинхронно
полезной guide
пример кода для толкания и получения сообщений от MSMQ:
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");
}
}
Другим широко используемым способом сделать это также будет использование ящиков, которые уже содержат такую функциональность, как Enterprise Library или NLog, которые предоставляют простые интерфейсы для этого.
Для получения сообщений я бы рекомендовал отдельную службу Windows, которая периодически читала сообщения и обрабатывала их. Хороший пример того, как сделать это дается здесь: Windows service with timer
Обновление: Windows Service Пример:
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
}
}
}
Не могли бы вы рассказать о своем ответе соответствующим кодом. –
@ B.Balamanigandan здесь вы друг. Добавлен код, который поможет вам. Надеюсь, теперь все более ясно. – Pan
Довольно хорошо ... Мне нужно вызвать метод чтения через службу Windows. Эта служба должна инициировать вызов для выполнения метода чтения. - Пожалуйста, поделитесь своей идеей в этой части. –