Calling Web Services from Client Script in ASP.NET AJAXを読んだのでメモ書き。
Calling Web Services from Client Script in ASP.NET AJAX
http://ajax.asp.net/docs/tutorials/ConsumingWebServicesWithAJAXTutorial.aspx
初めに
JavaScriptからWebサービスを呼び出すための方法について
・WEBサービス利用のためにページ上にプロキシクラス(javascript)を生成する。設定方法等。
WEBサービスを呼び出す方法
例
・値を返さないWEBサービスの呼び出し
・値を返すWEBサービスの呼び出し
・パラメータを取るWEBサービスメソッドの呼び出し
・「HTTP GET」を使うWEBサービスメソッドの呼び出し
・XMLドキュメントを返すWEBサービスメソッドの呼び出し
動くサンプル
http://ajax.asp.net/docs/Samples/Sys.Net.CallWebServiceMethods/cs/CallWebServiceMethods.aspx
サンプルソース
http://ajax.asp.net/docs/ViewSample.aspx?sref=Sys.Net.CallWebServiceMethods%23CallWebServiceMethods.aspx
デフォルトプロパティとしての個別コールバック関数
パラメータを並べなくても個別コールバック関数を利用すれば以下の事を別々に処理できる。
メリットはWEBサービスを呼び出すシンタックスが簡潔になります。
・成功時の処理
・失敗時の処理
・ユーザーコンテキストを使った処理
・引数を利用する処理
プロキシクラスのインスタンス上のプロパティとしてコールバック関数を設定する
プロキシクラスのインスタンスを作るとWEBサービスのメソッドを複数呼びだしたり、別々の初期値を設定できる。
追加情報:プロキシクラスの生成についての説明
http://ajax.asp.net/docs/ClientReference/Sys.Net/GeneratedProxyClasses/default.aspx
動くサンプル
http://ajax.asp.net/docs/Samples/Sys.Net.UsingProxyClass/cs/default.aspx
サンプルソース
http://ajax.asp.net/docs/ViewSample.aspx?sref=Sys.Net.CallWebServiceMethods%23CallWebServiceMethods.aspx
[メモ1]
UsingProxyClass.jsのpageload()はwindows.pageload()?ページがロードされる前の事前準備のイベント。
[メモ2]
次に呼び出すWEBサービスを事前に指定することによって、成功時、失敗時、ユーザーコンテキスト、引数の関数を個々に呼べるかわりに、呼び出されたWEBメソッドが何だったかを判断する必要あり。(methodName)
例:SucceededCallbackの場合
// Callback function invoked when the call to
// the Web service methods succeeds.
function SucceededCallback(result, userContext, methodName)
{
var message;
switch(methodName)
{
case ("GetDefaultColor"):
case ("SetColor"):
{
// Get the server default color.
message = result.message;
defaultRgb = result.rgb;
// Transform the rgb array into a string.
var serverColor = defaultRgb[0]+ defaultRgb[1] + defaultRgb[2];
// Display the result.
displayResult.style.color = "yellow";
displayResult.style.fontWeight = "bold";
displayResult.style.backgroundColor = "#" + serverColor;
DisplayMessage(message);
break;
}
default:
{
DisplayMessage("Method unknown");
}
}
}
WEBサービスメソッドの呼び出し中にエラーをハンドリングする
WebServiceMethodError.js Samples.AspNet.WebService.Div(a, b, SucceededCallback, FailedCallback);
に対してa=10、b=0をセット(処理は10/0で0除算のエラー)してFailedCallbackに流れる処理(エラーのハンドリング)のサンプル。
動くサンプル
http://ajax.asp.net/docs/Samples/Sys.Net.ErrorHandlingTutorial/cs/WebServiceMethodError.aspx
サンプルソース
http://ajax.asp.net/docs/ViewSample.aspx?sref=Sys.Net.ErrorHandlingTutorial%23WebServiceMethodError.aspx
複数のWEBメソッドから1つのコールバックを呼ぶ
引数の数、セットする値(※)によってコールバック内の処理を呼び分ける方法についてのサンプル。
[メモ2]の拡張。呼び出す条件に「ユーザーコンテキストの有無」「メソッド名の有無」を利用
※呼び出しのサンプル
Samples.AspNet.WebService.Add(a, b,動くサンプル
SucceededCallbackWithContext, FailedCallback, userContext, null);
Samples.AspNet.WebService.Add(a, b,
SucceededCallbackWithContext, FailedCallback);
http://ajax.asp.net/docs/Samples/Sys.Net.MultipleCallers/cs/MultipleCallers.aspx
サンプルソース
http://ajax.asp.net/docs/ViewSample.aspx?sref=Sys.Net.MultipleCallers%23MultipleCallers.aspx
複合型を返す
WEBサービスの戻り値をJavaScriptのオブジェクト(JSON)で返すことについてのサンプル。
ASP.NET側(HandleColor.asmx)のWEBサービスメソッドは、ColorObjectクラス(文字列を返すpublicメソッドが3つ)
WEBサービスメソッドに[GenerateScriptType(typeof(ColorObject))]属性を付加。
HandleColor.js側ではJavaScriptオブジェクト(JSON)で処理可能になる。
動くサンプル
http://ajax.asp.net/docs/Samples/Sys.Net.ReturnComplexType/cs/Default.aspx
サンプルソース
http://ajax.asp.net/docs/ViewSample.aspx?sref=Sys.Net.ExchangeComplexTypes
ジェネリクスや配列(array)型を返す
ジェネリクスや配列(array)型を返すWEBサービスのサンプル。
・ジェネリクスのList
※SimpleClassはカスタムクラス
※WEBサービスメソッドに[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]属性がなくても同じ結果。
・ジェネリクスのDistionary<String, String>型が戻り値。generics.js側ではJSONで処理できる。
・ジェネリクスのDistionary<String, SimpleClass2>型が戻り値。generics.js側ではJSONで処理できる。
※SimpleClass2はカスタムクラス
・ジェネリクスのDistionary
※WEBサービスクラスに[GenerateScriptType(typeof(SimpleClass2))]属性が必要
※※引数の型が1つの場合、List
根拠になりそうな箇所を抜粋
Passing Parameters Typed as Generics or Arrays・配列型(Array)が戻り値。generics.js側では配列型で処理できる。
However if a generic type takes more than one type argument, such as Dictionary<string, <T>>, ASP.NET AJAX does not generate proxy classes for the types.
動くサンプル
http://ajax.asp.net/docs/Samples/Sys.Net.WebServiceGenerics/cs/default.aspx
サンプルソース
http://ajax.asp.net/docs/ViewSample.aspx?sref=Sys.Net.WebServiceGenerics%23default.aspx
Enumerators型を返す
You cannot access enumerators by using instances of the generated proxy class.
サンプルがエラー無理らしい。
0 件のコメント:
コメントを投稿