#c# #.net #wcf #msmq #wcf-data-services
Вопрос:
Поэтому я отправляю сообщения в очередь с другой службой. В настоящее время у меня настроена служба, которая запускается вручную, открывает соединение с очередью, захватывает сообщение, вставляет его в базу данных, а затем прекращает работу. Я хочу использовать WCF, чтобы моя служба работала непрерывно и захватывала сообщение из очереди всякий раз, когда оно появляется.
У меня есть класс DataContract, который детализирует объект, который я отправляю в очередь, нужно ли мне писать отдельный контракт на обслуживание и подробно описывать метод обработчика, который будет вызываться при поступлении сообщения? Или я бы поместил этот метод в свой класс DataContract, который я уже написал? Я немного потерял представление о том, какие дополнительные вещи мне нужно написать, чтобы запустить WCF.
Если бы мне пришлось написать класс контракта на операцию службы, было бы это так же просто, как добавление метода обработчика, принимающего параметр msmqmessage? И после того, как это установлено, что мне нужно иметь в моем файле конфигурации? У меня уже есть адрес очереди, который я использовал, чтобы просто взять сообщение вручную, но нужно ли мне добавлять дополнительные сведения, чтобы WCF заработал, запустился и указал на очередь?
Вот как в настоящее время выглядит мой ручной захват сообщений —
private static void GrabFromQueue()
{
MessageQueue MyQueue = new MessageQueue(_queuePath);
MyQueue.Formatter = new XmlMessageFormatter(new Type[]
{typeof(MyContract)});
MessageQueueTransaction myTransaction = new
MessageQueueTransaction();
try
{
myTransaction.Begin();
Message myMessage = MyQueue.Receive(myTransaction);
_myContract = (FolderScanResultContract)myMessage.Body; //setting global variable initialized in the beginning to the object I just grabbed from the queue
myTransaction.Commit();
}
catch (MessageQueueException e)
{
myTransaction.Abort();
}
return;
}
Комментарии:
1. Вам нужна служба Windows? WCF устарел, используйте rest API. Если служба находится внутри компании, вам не понадобится контракт на обслуживание. Если он находится в демилитаризованной зоне, добавьте контракт.
2. @GHDevOps , да, WCF устарел, но это то, что использует моя компания, и я должен этому научиться. Мне просто нужно выяснить, как преобразовать эту программу из программы, запущенной вручную, в службу активного прослушивания WCF, и, к сожалению, документация по WCF в Интернете очень плохая, особенно для моих конкретных обстоятельств.
3. Если я вас правильно понял, на msdn есть образец .
4. Возможно, вы можете взглянуть на примеры по этой ссылке , которые могут вам помочь.