C++ 如何在MFC框架下通过HTTP使用XML实现双向通信

C++ 如何在MFC框架下通过HTTP使用XML实现双向通信,c++,xml,windows,http,mfc,C++,Xml,Windows,Http,Mfc,我的基于MFC的应用程序需要向另一个系统发送和接收基于XML的消息。现在,使用MSXML2::IXMLHTTPRequestPtr类处理客户端通信。这允许编写以下代码: 非常简单,而且效果很好。 但是另一端的系统也需要这样做,所以我的程序必须充当服务器。MSXML中似乎没有“XMLServer”对象。 现在我可以回到原始套接字编程。创建一个侦听套接字,在接收数据时尝试解析消息中的XML。但是,这似乎不是很有效,与HttpRequest对象的易用性相比肯定不是 实际上,我认为我希望在不发送任何数

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

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


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

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

是的,它很容易使用,但实际上您需要的是类似DCOM或TCP/IP套接字的东西

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

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

我知道我可以在ASP或ASP.NET中进行此操作,但我坚持使用MFC框架,因为软件的其余部分都是在MFC框架中创建的。基于XML的协议也是固定的,所以DCOM不是一个选项。我只是在寻找在MFC中获得客户机/服务器结构的最快、最简单的方法。底线回答:两个程序都知道连接到哪里,因为另一个程序的URL是手动输入的。此外,它们都提供“ping”服务,这基本上意味着如果它们接收到指向ping服务的HTTP请求,它们将简单地回显请求的内容,然后您必须实现HTTP服务器。这并不难——只要把所有的东西都读到空白行。如果是POST,则读取内容长度头,并读取请求正文的许多额外字节。谢谢你的链接。这就是我现在走的路线。但是我仍然希望有人知道一个让MSXML对象为我工作的诀窍…@CeesMeijer没有诀窍,它是一个客户机-服务器系统。XMLHTTP只是一个客户端。你两者都需要。
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