ASP.NET AJAX で作成された Proxy オブジェクトにコメントをつけてみる。

ASP.NET AJAX で構成された WebService は Microsoft AJAX Library から簡単に呼び出させます。そのあたりはここここを見てもらうとして、今回は WebService によって作成された Proxy クラスを覗いていてみようと思います。

Proxy クラスはたとえば http://localhsot/AjaxEnabledWebSite/WebService.asmx/js からアクセスすることが出来ます。実際にアクセスしてみると Proxy クラスのコードを見ることが出来ます。簡単にコメントをつけて見ます。
WebService.asmx
<Script.Services.ScriptService()> _
<WebService(Namespace:="http://comuplus.net/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class WebService
   Inherits System.Web.Services.WebService

   <WebMethod()> _
   Public Function HelloWorld() As String
      Return "Hello World"
   End Function

End Class


上記クラスの Proxy クラス
// WebService クラスを宣言する
var WebService = function() {
  WebService.initializeBase(this);
  this._timeout = 0;
  this._userContext = null;
  this._succeeded = null;
  this._failed = null;
}

WebService.prototype={
  // WebService.HelloWorld の宣言
  HelloWorld:function(succeededCallback, failedCallback, userContext) {
    // 呼び出されたときに親クラスの_invoke を呼び出す。
    // MicrosoftAjax.js にある Sys.Net.WebServiceProxy.invoke を呼び出す。
    return this._invoke(WebService.get_path(), 'HelloWorld', false, {}, succeededCallback, failedCallback, userContext);
  },

  // クラスの登録と継承
  WebService.registerClass('WebService', Sys.Net.WebServiceProxy);

  // インスタンスを作って各メソッドのオーバーライドを行う
  WebService._staticInstance = new WebService();
  WebService.set_path = function(value) {
    WebService._staticInstance._path = value;
  }

  // 中略

  // Proxy クラスの初期設定
  WebService.set_path("/ajaxenabledwebsite/webservice.asmx");
  WebService.HelloWorld= function(onSuccess,onFailed,userContext) {WebService._staticInstance.HelloWorld(onSuccess,onFailed,userContext); }
  var gtc = Sys.Net.WebServiceProxy._generateTypedConstructor;
  if (typeof(WebService_ComuplusMember) === 'undefined') {
    var WebService_ComuplusMember=gtc("WebService+ComuplusMember");
 
  WebService_ComuplusMember.registerClass('WebService_ComuplusMember');
}

ということなので Sys.Net.WebServiceProxy.invoke に関しても少し見てみましょう。
デバックモードの方が改行がされていて見やすいのでこのファイルで上記メソッドを検索します。
MicrosoftAjax.debug.js 大体4795行目あたりに該当のメソッドを発見できます。
これもコメントをつけてみます。
Sys.Net.WebServiceProxy.invoke = function Sys$Net$WebServiceProxy$invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, timeout) {
    // 中略

    // リクエストオブジェクトをつくり
    var request = new Sys.Net.WebRequest();

    // JSON 形式のパラメータを作成して
    request.get_headers()['Content-Type'] = 'application/json; charset=utf-8';
    if (!params) params = {};
    var urlParams = params;
        if (!useGet || !urlParams) urlParams = {};
    request.set_url(Sys.Net.WebRequest._createUrl(servicePath+"/"+methodName, urlParams));

    var body = null;
        if (!useGet) {
        // パラメータを JSON へシリアライズ
        body = Sys.Serialization.JavaScriptSerializer.serialize(params);

                if (body === "{}") body = "";
    }

    request.set_body(body);
    request.add_completed(onComplete);
    if (timeout && timeout > 0) request.set_timeout(timeout);

    // リクエストを行う
    request.invoke();

    // リクエストが終了したら
    function onComplete(response, eventArgs) {
        if (response.get_responseAvailable()) {
            var statusCode = response.get_statusCode();
            var result = null;

            try {
                // 形式に応じてデシリアライズされたオブジェクトを返却する
                var contentType = response.getResponseHeader("Content-Type");
                if (contentType.startsWith("application/json")) {
                    result = response.get_object();
                }
                else if (contentType.startsWith("text/xml")) {
                    result = response.get_xml();
                }
                                else {
                    result = response.get_responseData();
                }
            } catch (ex) {
            }

            // エラー処理中略
        }
    }

    return request;
}


ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 1

なるほど(納得、参考になった、ヘー)

この記事へのコメント

この記事へのトラックバック