2012-02-09 15 views
0

MFCベースのアプリケーションは、XMLベースのメッセージを別のシステムと送受信する必要があります。クライアント側の通信は、MSXML2 :: IXMLHTTPRequestPtrクラスを使用して行われます。これは、次のコードを記述することができます: MFCフレームワークでXML over HTTPを使用した双方向通信を実現する方法

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()は常にH​​ttp Requestメッセージを送信します。

したがって、1つのMFCプログラムでクライアントとサーバーの動作を実装する最良の方法は何ですか?

答えて

1

HTTPはクライアント/サーバーフレームワークです。一方の端にHTTPサーバーが必要で、XMLHTTPオブジェクトはクライアントのみを実装します。

はい、非常に使いやすいですが、実際にはDCOMまたはTCP/IPソケットのようなものです。

最低限のHTTP 1.0サーバーを作成できない場合は、難しくありません。どちらか、またはあなたのアーキテクチャにサーバーが必要です。 ASPやASP.Netだけでなく、他の何百万もの方法を使って、非常に簡単に作成することができます。しかし、私はあなたがDCOMのようなものを望むと思うのを助けることはできません。

ボトムライン:方法を決定する前に、コミュニケーションのパターンを決定する必要があります。 例を挙げて話を始めるにあたり、あなたのプログラムはお互いにどのように位置付けられるでしょうか?

+0

私はASPまたはASP.NETでこれを行うことができますが、私はMFCフレームワークに固執しています。これは残りのソフトウェアが作成されているためです。また、XMLベースのプロトコルも修正されています。オプションではありません.MFCでクライアント/サーバー構造を取得する最も簡単で簡単な方法を探しています。ボトムラインの回答:両方のプログラムは、相手のURLが手動で入力されるため、接続先を認識します。また、両方ともpingサービスを提供します。これは、基本的に、pingサービスに向けられたHTTPリクエストを受け取った場合、単にリクエストの内容をエコーし​​ます。 –

+0

HTTPサーバーを実装する必要があります。難しいことではありません。すべてを空白行まで読み上げるだけです。 POSTの場合は、Content-Lengthヘッダーを読み取り、その本文のためにその多くの余分なバイトを読み取ります。 http://www.microsoft.com/msj/archive/S25F.aspx http://developers.sun.com/mobility/midp/ttips/HTTPPost/ – Ben

+0

リンクをありがとう。これは私が今行ってきたルートです。しかし、私はまだ誰かが私のために働くMSXMLオブジェクトを作るためのトリックを知っていることを願っています... –

関連する問題