Я пытаюсь получить службу 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;
Знаете ли вы, как можно легко очистить символы Юникода при использовании двоичного форматера? Если так, то я думаю, что это может сработать.