代码之家  ›  专栏  ›  技术社区  ›  Jason Rowe

用C语言如何清理MSMQ消息格式,与C++ IXMLDOM文档2一起工作

  •  1
  • Jason Rowe  · 技术社区  · 16 年前

    我试图从C++生成一个C++服务来从一个MSMQ消息加载一个XML文档。我无法真正改变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);
    

        // 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启动之前将我认为是unicode字符的内容放在顶部。

    ....... ......)

    如果使用默认的XML格式化程序,则消息具有以下顶部元素。C++服务似乎无法处理这个问题。

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

    1 回复  |  直到 16 年前
        1
  •  1
  •   gingerbreadboy    16 年前

    你试过这个吗 ActiveXMessageFormatter

    编辑:刚刚试过,编译的很好,结果是否更好我还不能确定。