連載
ASP.NET AJAXを理解する

第2回 ASP.NET AJAXを使いこなす

マイクロソフト 松崎 剛
2007/03/27
Page1 Page2 Page3 Page4

3. サーバサイドにおけるカスタム処理の開発

 サーバサイドでのカスタム処理を作成するには、例えばXMLHttpRequestオブジェクトにより非同期通信を行うクライアントを実装し(Microsoft ASP.NET AJAX Libraryではブラウザに関係なくXMLHttpRequestオブジェクトを使えるようになっている)、そのクライアントに応じて(HTMLコードなどの)テキストを返すサーバを実装する方法が考えられる。しかしこの開発方法では、テキストのシリアライズ方法などを自前で構築しなければならないので大変だ。

 そこでASP.NET AJAXでは、ページ・メソッドとWebサービスを使う。これにより、ビジネス・ロジックの実装に集中できるようになっている。

 ページ・メソッドとは、ASP.NETのWebフォーム・ページ上のコード(.aspxファイル、もしくはそのコードビハインド・ファイル)にWebMethod属性を持つstaticなメソッドを定義し、このメソッドにクライアントのJavaScriptコードからアクセスするというものだ。ページ・メソッドは特に、すべての処理をサーバサイドで実行し結果だけをJavaScript経由で受信するUpdatePanelコントロールのように、ページ内で完結した処理を構築したい場合には最適な方法である。

 一方、サーバサイドをクライアントと明確に分離したい場合には、Webサービスを利用することができる。ページ・メソッドと異なり、サーバサイドの処理を別のサーバ上で実行してアクセスすることが可能だ。

 Ajax用のWebサービスの作成方法はおおむね通常のASP.NET Webサービスの開発方法と同じであるが、System.Web.Extensions.dllで定義されているScriptService属性をWebサービスのメソッドに指定することで、内部のシリアライズ方法はAjaxに適したJSON(JavaScript Object Notation)によるシリアライズが行われるようになる(つまり、WebサービスがAjax化されるということ)。

 以下のコードは、WebサービスのメソッドにScriptService属性を指定している例だ。

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService()]
public class SimpleService : System.Web.Services.WebService
{
   public SimpleService ()
   {
   }

   [WebMethod]
   public string[] GetAutoCompleteList(string prefixText)
   {
     ArrayList items = new ArrayList(3);
     items.Add(prefixText + "-test1");
     items.Add(prefixText + "-test2");
     items.Add(prefixText + "-test3");
     return (String[]) items.ToArray(typeof(String));
   }

}
ASP.NET WebサービスのメソッドをASP.NET AJAXに対応させる方法

 Webサービスのメソッドに実装したサーバサイドの処理にクライアントからアクセスする際には、クライアントサイドで動くJavaScriptによるプロキシ・コードを使うことができる。このプロキシ・コードは、ScriptManagerコントロールのServicesプロパティを設定することで自動的に生成される。

 実は、ページ・メソッドもWebサービスも、内部では、Sys.Net.WebServiceProxyという同じプロキシ・オブジェクトを使ってアクセスするようになっている(ページ・メソッドの場合は、「PageMethods」という名前のWebServiceProxyオブジェクトが生成される)。このため、プロキシ・オブジェクトを呼び出してから以降の内部処理は、ページ・メソッドであろうとWebサービスであろうと同じ手続きで処理される。

 実際の開発では、こうしたプロキシ・コードの生成は、開発者が毎回ScriptManagerコントロールのServicesプロパティを編集するのではなく、利用するサーバ・コントロールの内部のGetScriptReferencesメソッドなどの中で(自動的に)設定し、あくまでもサーバ集中型の開発モデルに専念できるようにする方が開発デザイン上は好ましいであろう。

 なお、第1回でもご紹介したように、CodePlexで公開されている「PHP for Microsoft AJAX Library」を使用すれば、PHPがインストールされた(Apacheなどの)サーバ上でもAjax用のWebサービス(サーバサイド・ロジック)の実装が可能となっている。

 以上、ここまで説明してきたページ・メソッドやWebサービスの具体的な作成方法については、いずれもASP.NET AJAXのチュートリアルドキュメントでも紹介されているのでぜひ参考にしていただきたい。

4. 最後に

 ここでは、実際の開発を想定し、大きな流れに沿ってASP.NET AJAXを使っていかに開発をしていくかを紹介した。

 実際の開発では、このほかにも、Webサービスへの認証の組み込みや、パーソナライズ機能の実装など、さまざまな仕組みが必要になるかもしれない。また、ここでは紹介しなかったが、将来的にはJavaScriptを使用せずXML-Scriptと呼ばれる宣言的な記述を行うこともできる予定だ(XML-Scriptのスクリプトは、単に宣言的に書けるという意味以上に、例えばlistviewなどのクライアント上の組み込みコントロールとデータをバインドさせるコードなども意味的に記述することができるというメリットがある。なおこの機能は、現在、Futures CTP版に実装されている)。

 本稿でご紹介したASP.NET AJAXの使い方の大きな流れ(大筋)と、それぞれについてどのようなポイントがあるかといったことを理解しておくことは重要である。そうすれば、機能や方法のすべてを覚えておかなくとも、あとは実際の必要性に応じて適宜リファレンス・ドキュメントなどを活用していけば使いこなせるからだ。

 ASP.NET AJAXのオンラインドキュメントでは、具体的なサンプル・コードも充実している。また、ASP.NET AJAX Control Toolkitの各コントロールに関する情報や、(HTTPのログ・ツールなど)開発に役立つツール類の情報など、日本の技術者から発信されているブログなどの情報もきっと役に立つはずだ。

 ASP.NET AJAXは、本稿で見てきたように、非常に洗練されたフレームワークである。JavaScriptコードも一度作成してしまえば、あとはサーバ・コントロールとして完全に隠ぺいすることができる。

 ただし、まったく問題点がないわけではない。例えば、ある程度の規模のサービス開発ともなれば、頻繁ではないとしてもサーバ・コントロールをまったく作成せずに済むということは考えられないだろう。また、JavaScriptコードの開発も大変だ。確かにInternet Explorerの設定を行うことでJavaScriptコードのデバッグなどは可能であるが、.NETとともに発展してきたVisual StudioがJavaScriptという.NETとは異なる実行基盤の開発環境として十分に成熟した環境であるかといえば必ずしもそうとはいいにくい。

 こうした点について、この記事を執筆している時点ではどのような改善がなされるか明確ではないが、JavaScriptが開発の本流(ASP.NET)に合流した以上、今後何らかの向上がなされていくことは間違いないであろう。End of Article

 

 INDEX
  [連載]ASP.NET AJAXを理解する
  第2回 ASP.NET AJAXを使いこなす
    1.ASP.NET AJAXのサーバ・コントロール
    2. クライアントサイドにおけるカスタム処理の開発
    3.JavaScriptコンポーネントのASP.NETサーバ・コントロール化
  4.サーバサイドにおけるカスタム処理の開発
 
インデックス・ページヘ  「ASP.NET AJAXを理解する」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間