SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

Visual StudioのWeb参照とカスタムクラスのパフォーマンスを比較する

Visual Studioが自動生成するプロキシクラスの効率性を検証

  • X ポスト
  • このエントリーをはてなブックマークに追加

 Visual Studioが自動生成したプロキシクラスを利用することと、WebサービスのXMLを直接取得して構文解析することは、どちらが効率的と言えるのでしょうか。この記事では、Visual Studioが自動生成したプロキシクラスが本当に効率的なのか、2種類の実験を行い、解説していきます。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 私たち開発者はみな、何らかの仮定に基づいてプログラミングを行います。その仮定の中で最も大きなものは、「.NET Frameworkに付属するライブラリとツールは、決まったタスクを達成するための最善の方法である」ということです。例えばほとんどの開発者は、Webサイトのユーザーアカウントを管理するためには、ユーザーアカウントストアを自作するよりも、ASP.NETのMembershipシステムを使った方がよいと当然のように思っています。Webサービスに接続するときのWeb参照の追加についても、同様のことが言えます。私たちは当然のように、Web参照を追加することで、Webサービスの呼び出し、パラメータのシリアライズなどの低レベルの詳細を処理するプロキシクラスを自動生成するマークアップを生成しています。

 最近、.NET FrameworkおよびWebサービスに関する私たちの基本的な仮定の1つについて、顧客から質問を受けました。それは「Webサービスに接続するために、なぜVisual Studioが作成したプロキシクラスを使用しなければならないのか?」というものでした。このプロジェクトでは、Webサービスを呼び出してデータを取得し、それからソートと若干の書式設定をしたうえでWebページに表示していました。しかし顧客は、HttpWebRequestクラスでWebサービスを直接呼び出し、XML出力を取得し、XmlDocumentオブジェクトにロードし、それからXSLTを使用してその結果をHTMLに出力する方が効率的ではないかと仮説を立てました。確かに、その方がVisual Studioの自動生成プロキシクラスを使用するより速いようにも思えます。

 この質問を受ける前は、プロキシクラスの自作を考えたことはありませんでした。これまではいつも、Visual Studioが自動生成したプロキシクラスを利用してきたのです。これらの自動生成プロキシクラスが非効率的ということはあるでしょうか? WebサービスのXMLを直接取得して構文解析する方が効率的でしょうか? これを確実に知るためには、顧客の仮説をテストしてみるしかありませんでした。

 この記事では、この仮説をテストするために行った実験を詳しく解説します。最後まで読んで、結果を確認してください。

Webサービスを呼び出すための2つのアプローチ

 Visual Studioの[Web参照の追加]オプションは、Webサービスを呼び出すための便利なツールです。このツールでは、WebサービスのWSDLファイルのURLを指定できます。これはXML形式のファイルであり、Webサービスによって提示されたメソッドと通信プロトコル、およびWebサービスとの対話に欠かせないその他の低レベル情報を記述しています。このWSDLファイルから、Visual StudioはWebサービスのメソッドを「ラップ」するプロキシクラスを自動的に生成します。要するに、プロキシクラスはWebサービスの各メソッドに対するメソッドを持っています。プロキシクラスのメソッドは、プロジェクト内のその他のクラスのメソッドを呼び出すのと同じ感覚で呼び出すことができます。しかしその舞台裏では、プロキシクラスはメソッドの入力パラメータをXMLにシリアライズし、WebサービスへのHTTP要求を行い、HTML応答で返されたXMLをデシリアライズしています。Webサービスの詳しい解説はこの記事の範囲を超えるので、Webサービスの基礎について詳しく知りたい場合は記事「An Extensive Examination of Web Services」を参照ください。

 プロキシクラスによってWebサービスとの対話は大幅に簡略化されますが、Webサービスとの通信にプロキシクラスを使用しなければならない理由はありません。代わりに、.NET FrameworkのSystem.Net名前空間内のクラスを使用してWebサービスにHTTP要求を行い、System.Xml名前空間内のクラスを使用して応答を構文解析することもできます。これが、顧客から提案されたアプローチでした。つまり、HttpWebRequestクラスを使用してWebサービスを呼び出し、XSLTを使用してXML応答をHTMLに変換し、そしてブラウザに発行できます。この提案の背後にあるのは、自動生成されたプロキシクラスにはオーバーヘッドがあり、これはより直接的な手段によって解消可能であるという仮定です。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
テスト1:WebサービスのXMLデータを取得する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Sam Menard(Sam Menard)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

John Jakovich(John Jakovich)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Jamie Davis(Jamie Davis)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5013 2010/04/02 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング