ASP.NET AJAX で作成された Proxy オブジェクトにコメントをつけてみる。
ASP.NET AJAX で構成された WebService は Microsoft AJAX Library から簡単に呼び出させます。そのあたりはここやここを見てもらうとして、今回は WebService によって作成された Proxy クラスを覗いていてみようと思います。
Proxy クラスはたとえば http://localhsot/AjaxEnabledWebSite/WebService.asmx/js からアクセスすることが出来ます。実際にアクセスしてみると Proxy クラスのコードを見ることが出来ます。簡単にコメントをつけて見ます。
WebService.asmx
上記クラスの Proxy クラス
ということなので Sys.Net.WebServiceProxy.invoke に関しても少し見てみましょう。
デバックモードの方が改行がされていて見やすいのでこのファイルで上記メソッドを検索します。
MicrosoftAjax.debug.js 大体4795行目あたりに該当のメソッドを発見できます。
これもコメントをつけてみます。
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;
}
この記事へのコメント