Использование C # как очистить формат сообщения MSMQ для работы с C ++ IXMLDOMDocument2 - PullRequest
1 голос
/ 09 января 2010

Я пытаюсь получить службу C ++ для загрузки документа XML из сообщения MSMQ, созданного C #. Я не могу изменить сторону C ++, потому что я пытаюсь вставить тестовые сообщения в очередь. Служба C ++ использует следующее для загрузки XML.

 CComPtr<IXMLDOMDocument2> spDOM;
 CComPtr<IXMLDOMNode> spNode;
 CComBSTR bstrVal;

 if(_FAILED(hr = spDOM.CoCreateInstance(CLSID_DOMDocument30)))
 {
  g_infoLog->LogCOMError(hr, "CWorker::ProcessBody() Can't Create DOM");
  pWork->m_nFailure = WORKFAIL_BADXML;
  goto Exit;
 }

hr = spDOM->loadXML(bstrBody, &vbResult);

Код C # для отправки сообщения MSMQ выглядит следующим образом (просто не очень хороший тестовый код):

    // open the queue 
    var mq = new MessageQueue(destinationQueue)
                          {
                              // store message on disk at all intermediaries 

                              DefaultPropertiesToSend = { Recoverable = true },

                              // set the formatter to Binary, default is XML 
                              Formatter = new BinaryMessageFormatter()
                          };

    // send message
    mq.Send(messageContent, "TestMessage");
    mq.Close();

Я пытался отправить то же сообщение, используя BinaryMessageFormatter, но он помещает то, что я считаю символами юникода вверху, до начала XML.

..... ууу ÿ ....... ...... А)

Если я использую форматер XML по умолчанию, в сообщении будет указан следующий верхний элемент. Служба C ++, похоже, не справляется с этим.

<?xml version="1 .0"?>..<string>& lt;

Знаете ли вы, как можно легко очистить символы Юникода при использовании двоичного форматера? Если так, то я думаю, что это может сработать.

1 Ответ

1 голос
/ 10 января 2010

Вы пробовали ActiveXMessageFormatter ? Возможно, он не скомпилируется с ним как средство форматирования, у меня нет возможности проверить его здесь, но это может произойти.

РЕДАКТИРОВАТЬ: только что попробовал, и все в порядке, независимо от того, получился ли результат лучше, я все еще не могу сказать наверняка.

...