c++ - MFC框架中如何使用XML over HTTP实现双向通信

标签 c++ xml windows http mfc

我的基于 MFC 的应用程序需要向另一个系统发送和从另一个系统接收基于 XML 的消息。现在,使用 MSXML2::IXMLHTTPRequestPtr 类处理客户端通信。这允许编写以下代码:

MSXML2::IXMLHTTPRequestPtr pHttpRequest;         // The HTTP Request object  
XmlDocument pXMLRequest;                         // The XML document contain 
HRESULT hResult;
hResult = pHttpRequest.CreateInstance("Msxml2.ServerXMLHTTP.3.0");
if ( FAILED(hResult) ) throw Error (hResult); 
pHttpRequest->open("POST", bURL,true);
pHttpRequest->send(pXMLRequest->xml);            // Send the XML request    
    while (pHttpRequest->GetreadyState() != 4)   // Just wait for the answer
     {                                           // (automatically on a 
     pHttpRequest->waitForResponse(10);          // separate thread so it 
     }                                           // does not block)

m_lHttpStatus = pHttpRequest->status;            //Read response and status
_bstr_t bsResponse = pHttpRequest->responseText; //responsetext contains the XML

相当简单,而且工作正常。 但是另一端的系统需要能够做同样的事情,所以我的程序将不得不充当服务器。而且 MSXML 中似乎没有“XMLServer”对象。
现在我可以回到原始套接字编程。创建一个监听套接字,并在接收数据时尝试解析消息中的 XML。但这似乎不是很有效,与 HttpRequest 对象的易用性相比肯定不是这样。
实际上,我认为我希望在不发送任何数据的情况下启动 HttpRequest,而不是让它无限期地等待响应。因此,“响应”实际上是来自其他系统的请求。但是 waitForResponse() 仅在 send() 之后起作用。并且 send() 总是发送 Http Request 消息...

那么在一个 MFC 程序中实现客户端和服务器行为的最佳方式是什么?

最佳答案

HTTP 是一个客户端/服务器框架。你需要在一端有一个 HTTP 服务器,而 XMLHTTP 对象只实现客户端。

是的,它非常易于使用,但您真正想要的是 DCOM 或 TCP/IP 套接字之类的东西。

如果失败,您可以创建一个最小的 HTTP 1.0 服务器 - 这并不难。要么,要么您的体系结构中需要一个服务器。您可以使用 ASP 或 ASP.Net 以及一百万种其他方式非常轻松地创建一个。但我不禁想到您想要更像 DCOM 的东西。

底线:在决定方法之前,您需要决定沟通的模式。 例如,您的程序将如何相互定位以开始对话?

关于c++ - MFC框架中如何使用XML over HTTP实现双向通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9208548/

相关文章:

linux - Windows 应用程序使用 SharpSVN - 需要将服务器迁移到 linux SVN 服务器 - 它仍然有效吗?

c++ - MS VC++ 编译器模棱两可

C++/CMake : Making a plugin system for many 'source plugins'

c++ - 将调用类转换为库本身后,库头文件中没有此类文件

java - 使用 Java 和 WS 安全性将 SOAP 消息发送到服务 : Internal Server Error

python - 在 Windows x64 中运行 Cython - fatal error C1083 : Cannot open include file: 'basetsd.h' : No such file or directory

c++ - 如何使用 SHGetFileInfo() 方法获取文件夹的打开图标?

java - weblogic log4j.xml 更改记录器的 "level value"(即时)

xml - Schematron-基于其位置的元素验证

python - 如何在 Windows 命令行中使用参数运行 Python 脚本