Ошибка удаленного приема MSMQ "Указанное имя формата не поддерживает запрошенную операцию"
Так столкнулся с этой странной проблемой. Я пытаюсь получить сообщение от не прошедшей проверку подлинности транзакционной MSMQ. Моя среда это:
- Сервер, где в очереди находится Windows Server 2012 R2. Это также сервер БД (SQL Server)
- Сервер, на котором установлено клиентское приложение, также является Windows Server 2012 R2
Я пытаюсь отправить сообщение с SQL Server на MSMQ (который работает нормально). Но когда клиентское приложение пытается получить сообщение, используя приведенный ниже код, оно выдает ошибку, о которой я упоминал в заголовке.
private void OnPeekCompleted(object sender, PeekCompletedEventArgs args)
{
MessageQueue mq = (MessageQueue)sender;
if (mq != null)
{
try
{
if (Log.IsInfoEnabled)
{
Log.InfoFormat("[{0}] Starting processing message queue {1}", _endpoint.RouteName, _queue.QueueName);
}
mq.EndPeek(args.AsyncResult);
MessageQueueTransaction transaction = new MessageQueueTransaction();
transaction.Begin();
Message message = mq.Receive(transaction);
... // omitted for simplicity
Я не могу получить доступ к клиентскому серверу с сервера БД, поэтому мне нужно иметь очередь сообщений на том же сервере БД, поскольку я отправляю сообщение в очередь из SQL
Я проверил следующее:
- Нет проблем с отправкой сообщения из SQL
- Нет н / ж проблема доступности между серверами
- Вызовы RPC без аутентификации включаются в свойствах безопасности сервера очереди сообщений.
- Формат очереди правильный. Я использую прямой формат ОС. Также пытался с форматом TCP, указав IP-адрес вместо имени машины
Но безрезультатно. Есть идеи?
Спасибо
1 ответ
Если раньше это работало и перестало работать, ваша проблема, скорее всего, связана с изменением кода неисправности на отправителе или получателе, на брандмауэре или на обоих.
Согласно этому руководству вам может понадобиться:
... настроить как компьютер очереди, так и клиентский компьютер для включения доступа к DTC по сети.
а также
... настроить брандмауэр Windows для добавления MS DTC в список исключений.
Если это никогда не работало, то это могло бы быть одной из нескольких других проблем, но, как указано здесь, удаленное чтение не является частью оптимальной модели обмена сообщениями, то есть оптимальной парадигмой, принятой для MSMQ, является отправка удаленная, чтение локальное. Попробуйте изменить архитектуру, чтобы не использовать удаленное чтение.