Моему приложению на основе 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?