Web サービスから Excel にデータを取得できる Excel アドインを作成しようとしています。
これを使用するには、ユーザーはアドインによって提供される関数名を入力するだけです。VBA で HTTP リクエストを実装している 2 つの記事を見つけました: XMLHTTPとServerXMLHTTPです。
私はそれらを使用するのに苦労しています。どれを使えばいいのかわからない。XMLHTTP と ServerXMLHTTP の違いは何ですか?
Web サービスから Excel にデータを取得できる Excel アドインを作成しようとしています。
これを使用するには、ユーザーはアドインによって提供される関数名を入力するだけです。VBA で HTTP リクエストを実装している 2 つの記事を見つけました: XMLHTTPとServerXMLHTTPです。
私はそれらを使用するのに苦労しています。どれを使えばいいのかわからない。XMLHTTP と ServerXMLHTTP の違いは何ですか?
ダヴズ、
Tim と Jay はどちらも優れたコンテキストと簡潔なコメントを提供します。少しだけ追加して、いくつかのコンテキストを提供しようとします。
本質的に、XMLHTTP オブジェクトは、Web サイト/Web サーバー/Web サービスからデータを要求するために使用される XMLHttpRequest を作成するために使用されます。詳細については、ウィキペディアのリンクを参照してください: http://en.wikipedia.org/wiki/XMLHttpRequest
一般に、アプリケーションを使用して Web サービスにリクエストを送信する場合など、クライアントとしてサーバーと通信する場合は、XMLHTTP が一般的に使用されます。XMLHTTP オブジェクトは、ファイル転送プロトコル (FTP)、URL キャッシング、その他の便利なツールなど、クライアントに焦点を当てたさまざまな転送方法にも使用されます。要するに、XMLHTTP オブジェクトは、FTP 接続を介したサーバーへのアクセス、リポジトリからの一連のファイル、または Web サービスのいずれであっても、何らかのサーバーへの要求を作成し、クライアントに関心のある何かを要求するために使用されます。クライアントからのデータを処理するため。
対照的に、ServerXMLHTTP は、サーバー間、アプリケーション (クライアント) との通信、およびクライアントからの要求の処理を目的としています。ServerXMLHTTP オブジェクトは状態をアクティブに保ちます。つまり、宛先との間で送受信される情報は、現在の接続での将来のデータ トランザクションのために保持されます。また、「URL キャッシング、自動プロキシ サーバーの検出、HTTP/1.1 チャンキング、オフライン サポート、Gopher および FTP プロトコルのサポート」を、ServerXMLHTTP オブジェクトで使用される http クライアント スタックに適用します。
技術的な観点から、XMLHTTP オブジェクトはその機能に WinInet (Windows Internet Explorer) を使用しますが、ServerXMLHTTP オブジェクトはクライアント スタックを使用します。WinInet dll は Windows インターネット プロトコル管理のバックボーンであり、この dll は HTTP、HTTPS、FTP および同様の要求を処理するために使用されます。
対照的に、ServerXMLHTTP オブジェクトが新しいクライアント http スタックを作成する場合、これは本質的に HTTP クライアントの個別の「セッション」です。個別のセッションを使用するということは、メモリとソケット接続の可用性に応じて、ServerXMLHTTP オブジェクトの複数のインスタンスがいつでもアクティブになる可能性があることを意味します。
つまり、一言で言えば、上記のコメントからの情報に加えて、XMLHTTP オブジェクトは、情報を要求し、何らかの方法で (通常はクライアントとして) 使用するためによく使用されます。同様に便利ですが、しばしば異なる方法で使用される ServerXMLHTTP オブジェクトを使用して、データを要求したり、データを送信したり、別のアプリケーションに受信したデータを比較的効率的な方法で別のアプリケーションに渡したりすることさえできます。これは、リアルタイムの応答を必要とするビジネス アプリケーションや、一連の要求が与えられたクライアントにデータを提供するためによく使用されます。これらの要求には条件が組み込まれている可能性があります。
うまくいけば、2つの違いに光が当てられます. XMLHTTP タイプの要求の特定の部分の使用に関する SO の質問/回答を読んだり、VB、VBA、および Microsoft Office のインターネット/XMLHTTPRequest 固有の資料に関するドキュメントを提供する MSDN や他のサイトをより深く調査したりすると、さらに多くのことがわかります。
それが役立つかどうか、または他の質問や考えがある場合はお知らせください。
~JOL
私はちょうど違いにぶつかりました: Web サーバー (IIS) が匿名アクセスではなく Windows 認証のみを許可するように構成されている場合、ServerXMLHTTP 呼び出しは認証エラーで失敗しますが、XMLHTTP 呼び出しはそうではありません。XMLHTTP オブジェクトは、必要に応じて Windows 認証資格情報の送信を自動的に処理するようです。NetworkCredentials を ServerXMLHTTP オブジェクトに追加することが最善の解決策であると思われますが、プレーンテキストの uid/pwd を明示的に渡す基本認証しか見つかりませんでした (明らかに受け入れられません)。
ServerXMLHTTP オブジェクトは winhttp を利用しますが、XMLHTTP は wininet を利用します。
wininet は認証やプロキシ構成などを解析するため、ServerXMLHTTP を利用する場合のような問題は発生しません。ただし、XMLHTTP 内の柔軟性が限られているため、サーバーと宛先エンドポイントの認証メカニズムをネゴシエートする必要があるため、ServerXMLHTTP を使用する際に追加の責任を負わざるを得なくなる場合がありますが、winhttp にはこれを支援する方法があります。
よりクライアント ベースの XMLHTTP を、より構成可能な堅牢な ServerXMLHTTP オブジェクトおよびクラスに移植するとき、なぜそれほど前にそうしなかったのか不思議に思うかもしれません。
不運で今は機能していない WPAD サポートについても、私を始めさせないでください。:)