Как добиться двусторонней связи с использованием XML через HTTP в инфраструктуре MFC - PullRequest
0 голосов
/ 09 февраля 2012

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

1 Ответ

1 голос
/ 09 февраля 2012

HTTP - это клиент-серверная структура. У вас должен быть HTTP-сервер на одном конце, а объект XMLHTTP реализует только клиент.

Да, его очень просто использовать, но на самом деле вам нужно что-то вроде сокетов DCOM или TCP / IP.

Если вам не удастся создать минимальный сервер HTTP 1.0 - это не сложно. Либо так, либо вам нужен сервер в вашей архитектуре. Вы можете сделать это очень легко, используя ASP или ASP.Net, а также миллион других способов. Но я не могу не думать, что вы хотите что-то более похожее на DCOM.

Итог: Вам необходимо определиться со схемой общения, прежде чем вы решите метод. Как ваши программы собираются найти друг друга, чтобы начать говорить, например?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...