ASP.NET AJAX のホームへ戻る

Webサービスを呼び出す(ScriptManagerProxy

 

WebページからWebサービスを呼び出すには、ScriptManagerの代わりにScriptManagerProxyを使用してWebサービスのファイル(.asmx)を宣言します。VS 2005のツールボックスから「AJAX Extensions」を展開したら「ScriptManagerProxy」をドラッグ&ドロップしてWebページのデザイナに配置します。ScriptManagerProxyのプロパティウィンドウからServicesコレクションをクリックしたら[…]ボタンをクリックして、「ServiceReferenceコレクションエディタ」からWebサービスファイル「WebService1.asmx」のパスを追加します。同様の手順で、プロパティウィンドウのScriptsコレクションから[…]ボタンをクリックして、JavaScriptの外部ファイル「Sample1.aspx.js」のパスを追加します。

 

Sample1.aspx.jsファイルには、Webサービスをリクエストしてレスポンスを取得するためのJavaScriptが記述されています(リスト2)JavaScriptからWebサービスをリクエストするには、「WebService1.GetServerDate(onSuccess, onFailure)」のように記述します。「WebService1」は、ASP.NET AJAXによって自動生成されたプロシキクラスです。「GetServerDate」はWebサービスのメソッドで、Webサーバーからシステム日付を取得して返します(リスト3)GetServerDateの引数onSuccessonFailureには、Webサービスが完了したときに実行されるJavaScriptの関数を指定します。onSuccessは正常終了、onFailureは異常終了したときに実行されます。onSuccessでは、GetServerDateメソッドから返されたシステム日付をalert関数で表示しています。onFailureでは、引数errorに格納されているエラー情報を表示しています。

 

JavaScriptファイルの最後の2行のコードは、JavaScriptの外部ファイルがロードされたことを通知するためのもので、Beta2では必ず実行します。この2行のコードがないと、JavaScriptの外部ファイル読み込み時にエラーになります。

 

if(typeof(Sys) !== "undefined")

  Sys.Application.notifyScriptLoaded();

 

ASP.NET AJAX Beta2ではWebサービスのクラスに「<ScriptService()>」属性を追加する必要があります。GetServerDateメソッドにはAtlasと同様「<WebMethod()>」属性を追加します。GetServerDateメソッドはシステム日付を取得して戻り値として返します(リスト3)

 

VS 2005から[デバッグ開始]ボタンをクリックしてSample1.aspxを実行したら、[サーバーの日付取得]ボタンをクリックします。するとWebサーバーのシステム日付がポップアップウィンドウに表示されます。

 

fig10

WebページからWebサービスを呼び出すにはScriptManagerProxyを宣言する

 

fig11afig11b

図 コレクションエディタからWebサービスとJavaScriptファイルのパスを追加

 

fig12

図 [サーバーの日付取得]ボタンをクリックするとポップアップウィンドウにWebサーバーのシステム日付が表示される

 

リスト: Sample1.aspx

<aspAjax:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server">

  <Services>

    <aspAjax:ServiceReference Path="~/Sample1/WebService1.asmx" />

  </Services>

  <Scripts>

    <aspAjax:ScriptReference Path="~/Sample1/Sample1.aspx.js" />

  </Scripts>

</aspAjax:ScriptManagerProxy>

<input id="btnGetDate" type="button" value="サーバーの日付取得" onclick="getServerDate();" />

 

リスト: Sample1.aspx.js

function getServerDate() {

  WebService1.GetServerDate(onSuccess, onFailure);

}

function onSuccess(result, userContext, methodName) {

  alert(result);

}

function onFailure(error, userContext, methodName) {

  if(error !== null) {

    alert(error.get_message());

  }

}

if(typeof(Sys) !== "undefined")

  Sys.Application.notifyScriptLoaded();

 

リスト: WebService1.asmx

<%@ WebService Language="VB" Class="WebService1" %>

Imports System.Web

Imports System.Web.Services

Imports System.Web.Services.Protocols

Imports Microsoft.Web.Script.Services

 

<WebService(Namespace:="http://tempuri.org/")> _

<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _

<ScriptService()> _

Public Class WebService1

  Inherits System.Web.Services.WebService

  <WebMethod()> _

  Public Function GetServerDate() As String

    Return System.DateTime.Now.ToString()

  End Function

End Class

 

ASP.NET AJAX のホームへ戻る