次の方法で共有


ASP.NET AJAX での Web サービスの使用

更新 : 2007 年 11 月

ここでは、AJAX 対応 ASP.NET Web ページのクライアント スクリプトから Web サービスにアクセスする方法について説明します。対象となるサービスは、ユーザーが作成するカスタム サービス、組み込みのアプリケーション サービスのいずれかです。アプリケーション サービスは ASP.NET AJAX の一部として提供され、認証、ロール、およびプロファイルの各サービスを含みます。

カスタム Web サービスは、.ASP.NET Web サービス (.asmx サービス)、Windows Communication Foundation (WCF) サービス (.svc サービス) のいずれかの形式になります。

このトピックは、次の内容で構成されています。

  • シナリオ

  • 背景

  • その他のリソース

  • クラス リファレンス

  • 新機能

シナリオ

次の場合、WCF と ASP.NET を使用します。

  • WCF サービスを既に作成してある場合は、AJAX 対応 Web ページのスクリプトがサービスにアクセスできるようにするエンドポイントを追加できます。詳細については、「クライアント スクリプトへの WCF サービスの公開」を参照してください。

  • ASP.NET Web (.asmx) サービスを既に作成してある場合は、AJAX 対応 Web ページのスクリプトが同じサービスにアクセスできるよう、そのサービスを変更できます。詳細については、「クライアント スクリプトへの Web サービスの公開」を参照してください。

  • ASP.NET AJAX Web ページからアクセスするカスタム Web ページを作成するには、WCF サービスまたは ASP.NET Web サービス (.asmx ファイル) として実装します。

  • 組み込みの ASP.NET アプリケーション サービスを使用すると、AJAX 対応 Web ページで実行されるクライアント スクリプトからユーザーの認証、ロール、およびプロファイルの各情報にアクセスできます。詳細については、「ASP.NET AJAX でのフォーム認証の使用」を参照してください。

背景

ASP.NET を使用すると、Web ページ内のクライアント スクリプトからアクセスできる Web サービスを作成できます。ページは、AJAX テクノロジを使用して Web サービス呼び出しを行う Web サービス通信レイヤを通じてサーバーと通信します。クライアントとサーバーの間では、データは非同期 (通常は JSON 形式) で交換されます。

AJAX クライアントのクライアント サーバー間の通信

AJAX 対応 Web ページでは、ブラウザはサーバーに対してページの初期要求を行った後、Web サービスに対してデータの非同期要求を行います。クライアント通信要素は、サーバーおよびコア クライアント スクリプト ライブラリからダウンロードされたプロキシ クラスの形式です。サーバー通信要素は、ハンドラとカスタム サービスです。クライアントとサーバーの間の通信に含まれる要素を次の図に示します。

クライアントとサーバーの通信
AJAX の Web サービス クライアント サーバー通信

AJAX クライアント アーキテクチャ

ブラウザは、プロキシ クラスを使用して Web サービス メソッドを呼び出します。プロキシ クラスはサーバーによって自動的に生成され、ページの読み込み時にブラウザにダウンロードされるスクリプトです。プロキシ クラスには、Web サービスの公開メソッドを表すクライアント オブジェクトが用意されています。

Web サービス メソッドを呼び出すために、クライアント スクリプトはプロキシ クラスの対応するメソッドを呼び出します。呼び出しは、XMLHTTP オブジェクトを通じて非同期で行われます。

Web サービス通信レイヤには、プロキシ クラスがサービス呼び出しを実行できるようにするライブラリ スクリプトの種類が含まれています。詳細については、Sys.Net 名前空間に含まれるクラスを参照してください。

プロキシ クラスとコア Web サービス通信レイヤ内のコードにより、XMLHTTP の複雑さとブラウザ間の違いが隠ぺいされます。これにより、Web サービスの呼び出しに必要なクライアント スクリプトが簡略化されます。

Web サービス要求を行うには、次の 2 つの手法があります。

  • HTTP POST 動詞を使用して Web サービスを呼び出します。POST 要求には、ブラウザがサーバーに送信するデータを含む本体があります。POST 要求にはサイズ制限はありません。そのため、データのサイズが GET 要求固有のサイズ制限を超えた場合でも、POST 要求を使用できます。クライアントは要求を JSON 形式にシリアル化し、POST データとしてサーバーに送信します。サーバーは JSON データを .NET Framework 型に逆シリアル化して、実際の Web サービス呼び出しを行います。応答中に、サーバーは戻り値をシリアル化し、クライアントに返します。クライアントはそれを処理するために JavaScript オブジェクトに逆シリアル化します。

  • HTTP GET 動詞を使用して Web サービスを呼び出します。これは POST 要求の機能に似ていますが、次のような違いがあります。

    • クライアントはクエリ文字列を使用して、パラメータをサーバーに送信します。

    • GET 要求は、ScriptMethodAttribute 属性を使用して構成された Web サービス メソッドのみを呼び出すことができます。

    • データ サイズは、ブラウザが許可する URL の長さに制限されます。

      Bb515101.alert_note(ja-jp,VS.90).gifメモ :

      サーバー上のデータを変更するメソッド呼び出し、または重要な情報を公開するメソッド呼び出しでは、GET 要求を回避する必要があります。GET 要求ではメッセージがブラウザによって URL にエンコードされるため、容易に改ざんの標的になります。重要情報を保護するために、GET 要求および POST 要求の使用についてはセキュリティ ガイドラインに従ってください。

ASP.NET AJAX クライアント アーキテクチャを次の図に示します。

AJAX クライアント アーキテクチャ
AJAX の Web サービス クライアント アーキテクチャ

クライアント アーキテクチャの要素には、コア ライブラリ内の Web サービス通信レイヤ、およびページで使用されるサービス用のダウンロードされたプロキシ クラスが含まれます。図に示されている個別の要素は次のとおりです。

  • カスタム サービス プロキシ クラス。サーバーによって自動的に生成され、ブラウザにダウンロードされるクライアント スクリプトで構成されます。プロキシ クラスには、ページで使用される WCF サービスまたは ASMX サービスごとにオブジェクトが用意されています (つまり、ページの ScriptManager コントロールの ServiceReferences 要素に含まれる項目ごとにオブジェクトが用意されています)。クライアント スクリプトでプロキシ メソッドを呼び出すと、サーバー上の対応する Web サービス メソッドへの非同期要求が作成されます。

  • 認証プロキシ クラス。AuthenticationService プロキシ クラスは、サーバー認証アプリケーション サービスによって生成されます。このプロキシ クラスにより、ユーザーは、サーバーへのラウンド トリップを行わなくても、ブラウザの JavaScript を使用してログオンまたはログアウトできます。

  • ロール プロキシ クラス。RoleService プロキシ クラスは、サーバー ロール アプリケーション サービスによって生成されます。このプロキシ クラスにより、サーバーへのラウンド トリップを行わなくても、ユーザーをグループ化し、JavaScript を使用して各グループを 1 つの単位として扱うことができます。これは、サーバー上のリソースへのアクセスを有効にする、または拒否する場合に便利です。

  • プロファイル プロキシ クラス。ProfileService プロキシ クラスは、サーバー プロファイル アプリケーション サービスによって生成されます。このプロキシ クラスは、サーバーへのラウンド トリップを行わなくても、JavaScript を使用して、現在のユーザーのプロファイル情報をクライアントで使用できるようにします。

  • ページ メソッド プロキシ クラス。ASP.NET ページで、静的メソッドを Web サービス メソッドであるかのように呼び出すことができるスクリプト インフラストラクチャをクライアント スクリプトに提供します。詳細については、「クライアント スクリプトからの Web サービスの呼び出し」を参照してください。

  • Web サービス通信レイヤ。これは、クライアント スクリプトの種類を含むライブラリです。これらの種類により、ブラウザ (クライアント) はサーバー上のサービスと通信できます。また、クライアントとサーバーの間の非同期通信を確立および保持するための複雑な手続きが、クライアント アプリケーションで不要になります。非同期機能を提供するブラウザの XMLHTTP オブジェクトをカプセル化し、クライアント アプリケーションがブラウザに依存しないようにします。Web サービス通信レイヤの主な要素を次に示します。

    • WebRequest. Web 要求を行うためのクライアント スクリプト機能を提供します。詳細については、「WebRequest」クラスを参照してください。

    • WebRequestManager. WebRequest オブジェクトによって関連するエグゼキュータ オブジェクトに発行される Web 要求のフローを管理します。詳細については、WebRequestManager」クラスを参照してください。

    • XmlHttpExecutor. ブラウザの XMLHTTP サポートを使用して、非同期ネットワーク要求を行います。詳細については、「XmlHttpExecutor」クラスを参照してください。

    • JSON シリアル化。JavaScript オブジェクトを JSON 形式にシリアル化します。JavaScript eval 関数を使用することで、逆シリアル化を使用できます。詳細については、「JavaScriptSerializer」クラスを参照してください。

既定のシリアル化形式は JSON ですが、Web サービスと ASP.NET Web ページ内の個別のメソッドは、XML などの別の形式を返すことができます。メソッドのシリアル化形式は属性で指定できます。たとえば ASMX サービスの場合、次の例に示すように、Web サービス メソッドが XML データを返すように ScriptMethodAttribute 属性を設定できます。

[ScriptMethod(ResponseFormat.Xml)] 

<ScriptMethod(ResponseFormat.Xml)> 

AJAX Server アーキテクチャ

クライアント アプリケーションとの通信を可能にする要素を含む、AJAX サーバー アーキテクチャを次の図に示します。

AJAX Server アーキテクチャ
AJAX の Web サービス サーバー アーキテクチャ

サーバー アーキテクチャの要素には、HTTP ハンドラとシリアル化クラス、カスタム サービス、ページ メソッド、およびアプリケーション サービスを持つ Web サービス通信レイヤが含まれます。図に示されている個別の要素は次のとおりです。

  • カスタム Web サービス。クライアントへの適切な応答を実装して返すことができるサービス機能を提供します。カスタム Web サービスは、ASP.NET サービスと WCF サービスのいずれかです。Web サービス通信レイヤは、クライアント スクリプトから非同期で呼び出すことができるクライアント スクリプト プロキシ クラスを自動的に生成します。

  • ページ メソッド。このコンポーネントを使用すると、ASP.NET ページ内のメソッドを Web サービス メソッドであるかのように呼び出すことができます。ページ メソッドは、ページ メソッド呼び出しを実行しているページで定義する必要があります。

  • 認証サービス。認証サービスは、ユーザーがクライアント JavaScript を使用してログオンまたはログアウトできる認証プロキシ クラスを生成します。このアプリケーション サービスはいつでも使用でき、インスタンス化する必要はありません。詳細については、「ASP.NET AJAX でのフォーム認証の使用」を参照してください。

  • ロール サービス。ロール サービスは、クライアント JavaScript が現在認証されているユーザーのロール情報にアクセスできるようにするロール プロキシ クラスを生成します。このアプリケーション サービスはいつでも使用でき、インスタンス化する必要はありません。詳細については、「ASP.NET AJAX でのロール情報の使用」を参照してください。

  • プロファイル サービス。プロファイル サービスは、クライアント JavaScript が現在の要求に関連付けられたユーザーのプロファイル プロパティを取得および設定できるようにするプロファイル プロキシ クラスを生成します。このアプリケーション サービスはいつでも使用でき、インスタンス化する必要はありません。詳細については、「ASP.NET AJAX でのプロファイル情報の使用」を参照してください。

  • JSON シリアル化。サーバー JSON シリアル化コンポーネントにより、一般的な .NET Framework の型について、カスタマイズ可能な JSON 形式へのシリアル化と JSON 形式からの逆シリアル化を実行できます。詳細については、「JavaScriptSerializer」を参照してください。

  • XML シリアル化。Web サービス通信レイヤは、Web サービスへの SOAP 要求の XML シリアル化、および Web サービスへの JSON 要求から XML 型を返すための XML シリアル化をサポートします。

クライアント スクリプトから ASP.NET サービスと WCF サービスを呼び出す方法の例を次に示します。クライアント スクリプトからアプリケーション サービスを呼び出す方法の例は、このドキュメントの別のセクションに記載されています。関連リンクは、このトピックの後半に記載されています。

AJAX での Web サービス メソッドの呼び出し

.NET Framework により、クライアント スクリプトを使用してブラウザから ASP.NET Web サービス (.asmx) メソッドを非同期で呼び出すことができます。ブラウザとサーバーの間ではデータのみが転送されるため、ポストバックとページ全体の更新を行わなくても、サーバーベースのメソッドを呼び出すことができます。

ASP.NET Web ページで Web サービス メソッドを公開する方法を次の例に示します。

<%@ Page Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

    <head id="Head1" runat="server">
        <style type="text/css">
            body {  font: 11pt Trebuchet MS;
                    font-color: #000000;
                    padding-top: 72px;
                    text-align: center }

            .text { font: 8pt Trebuchet MS }
        </style>

        <title>Simple Web Service</title>

            <script type="text/javascript">

            // This function calls the Web Service method.  
            function GetServerTime()
            {
                Samples.AspNet.ServerTime.GetServerTime(OnSucceeded);
            }

            // This is the callback function that
            // processes the Web Service return value.
            function OnSucceeded(result)
            {
                var RsltElem = document.getElementById("Results");
                RsltElem.innerHTML = result;
            }

        </script>

    </head>

    <body>
        <form id="Form1" runat="server">
         <asp:ScriptManager runat="server" ID="scriptManager">
                <Services>
                    <asp:ServiceReference path="ServerTime.asmx" />
                </Services>
            </asp:ScriptManager>
            <div>
                <h2>Server Time</h2>
                    <p>Calling a service that returns the current server time.</p>

                    <input id="EchoButton" type="button" 
                        value="GetTime" onclick="GetServerTime()" />
            </div>
        </form>

        <hr/>

        <div>
            <span id="Results"></span>
        </div>   

    </body>

</html>
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

    <head id="Head1" runat="server">
        <style type="text/css">
            body {  font: 11pt Trebuchet MS;
                    font-color: #000000;
                    padding-top: 72px;
                    text-align: center }

            .text { font: 8pt Trebuchet MS }
        </style>

        <title>Simple Web Service</title>

            <script type="text/javascript">

            // This function calls the Web Service method.  
            function GetServerTime()
            {
                Samples.AspNet.ServerTime.GetServerTime(OnSucceeded);
            }

            // This is the callback function that
            // processes the Web Service return value.
            function OnSucceeded(result)
            {
                var RsltElem = document.getElementById("Results");
                RsltElem.innerHTML = result;
            }

        </script>

    </head>

    <body>
        <form id="Form1" runat="server">
         <asp:ScriptManager runat="server" ID="scriptManager">
                <Services>
                    <asp:ServiceReference path="ServerTime.asmx" />
                </Services>
            </asp:ScriptManager>
            <div>
                <h2>Server Time</h2>
                    <p>Calling a service that returns the current server time.</p>

                    <input id="EchoButton" type="button" 
                        value="GetTime" onclick="GetServerTime()" />
            </div>
        </form>

        <hr/>

        <div>
            <span id="Results"></span>
        </div>   

    </body>

</html>

ページ スクリプトによって呼び出される Web ページと関連する Web サービスの例を次に示します。

<%@ WebService Language="VB" Class="Samples.AspNet.ServerTime" %>

Imports System.Web
Imports System.Web.Services
Imports System.Xml
Imports System.Web.Services.Protocols
Imports System.Web.Script.Services

Namespace Samples.AspNet

    <WebService(Namespace:="http://tempuri.org/")> _
    <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
    <ScriptService()> _
    Public Class ServerTime
        Inherits System.Web.Services.WebService

        <WebMethod()> _
        Public Function GetServerTime() As String
            Return String.Format("The current time is {0}.", _
                DateTime.Now)

        End Function
    End Class

End Namespace

<%@ WebService Language="C#" Class="Samples.AspNet.ServerTime" %>

using System;
using System.Web;
using System.Web.Services;
using System.Xml;
using System.Web.Services.Protocols;
using System.Web.Script.Services;

namespace Samples.AspNet
{

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

        [WebMethod]
        public string GetServerTime()
        {
            return String.Format("The server time is {0}.", 
                DateTime.Now);

        }

    }

}

AJAX クライアントからの HTTP 要求

前の例は、Web サービスの自動的に生成されたプロキシ クラスを呼び出すことで、クライアント スクリプトから Web サービスを呼び出す方法を示しています。クライアント スクリプトから Web サービスへの低レベルの呼び出しを行うこともできます。この方法は、通信レイヤを管理したり、サーバーとの間で送信されているデータを調べたりする必要がある場合に使用します。この方法で Web サービスを呼び出すには、「WebRequest」クラスを使用します。

WebRequest オブジェクトを使用して、指定した URL (HTTP エンドポイント) に接続する GET Web 要求と POST Web 要求を実装する方法を次の例に示します。

// ConnectingEndPoints.js

var resultElement;

function pageLoad()
{
    resultElement = $get("ResultId");
}

// This function performs a GET Web request.
function GetWebRequest()
{
    alert("Performing Get Web request.");

    // Instantiate a WebRequest.
    var wRequest = new Sys.Net.WebRequest();

    // Set the request URL.      
    wRequest.set_url("getTarget.htm");
    alert("Target Url: getTarget.htm");

    // Set the request verb.
    wRequest.set_httpVerb("GET");

    // Set the request callback function.
    wRequest.add_completed(OnWebRequestCompleted);

    // Clear the results area.
    resultElement.innerHTML = "";

    // Execute the request.
    wRequest.invoke();  
}

// This function performs a POST Web request.
function PostWebRequest()
{
    alert("Performing Post Web request.");

    // Instantiate a WebRequest.
    var wRequest = new Sys.Net.WebRequest();

    // Set the request URL.      
    wRequest.set_url("postTarget.aspx");
    alert("Target Url: postTarget.aspx");

    // Set the request verb.
    wRequest.set_httpVerb("POST");

    // Set the request handler.
    wRequest.add_completed(OnWebRequestCompleted);

    // Set the body for he POST.
    var requestBody = 
        "Message=Hello! Do you hear me?";
    wRequest.set_body(requestBody);
    wRequest.get_headers()["Content-Length"] = 
        requestBody.length;

    // Clear the results area.
   resultElement.innerHTML = "";

    // Execute the request.
    wRequest.invoke();              
}


// This callback function processes the 
// request return values. It is called asynchronously 
// by the current executor.
function OnWebRequestCompleted(executor, eventArgs) 
{    
    if(executor.get_responseAvailable()) 
    {
        // Clear the previous results. 

       resultElement.innerHTML = "";

        // Display Web request status. 
       resultElement.innerHTML +=
          "Status: [" + executor.get_statusCode() + " " + 
                    executor.get_statusText() + "]" + "<br/>";

        // Display Web request headers.
       resultElement.innerHTML += 
            "Headers: ";

       resultElement.innerHTML += 
            executor.getAllResponseHeaders() + "<br/>";

        // Display Web request body.
       resultElement.innerHTML += 
            "Body:";

      if(document.all)
        resultElement.innerText += 
           executor.get_responseData();
      else
        resultElement.textContent += 
           executor.get_responseData();
    }

}
if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();

AJAX での WCF サービス操作の呼び出し

基本的に .asmx ベースのサービスを呼び出すのと同じように、クライアント スクリプトから Windows Communication Foundation (WCF) サービス (.svc) を非同期で呼び出すことができます。ASP.NET Web ページで WCF サービス操作を公開して呼び出す方法を次の例に示します。

<%@ Page Language="VB" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <style type="text/css">
        body {  font: 11pt Trebuchet MS;
                font-color: #000000;
                padding-top: 72px;
                text-align: center }

        .text { font: 8pt Trebuchet MS }
    </style>
    <title>Simple WCF Service Page</title>

</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
            <Services>
                <asp:ServiceReference 
                    Path="SimpleService.svc/ws"/>
            </Services>
            <Scripts>
                <asp:ScriptReference Path="service.js" />
            </Scripts>
        </asp:ScriptManager>
        
        <div>
            <h2>Simple WCF Service</h2>
            <input type='button' name="clickme"  value="Greetings" 
                onclick="javascript:OnClick()" /> &nbsp; &nbsp;
            <input type='button' name="clickme2"  value="Greetings2" 
                onclick="javascript:OnClick2()" />
            <hr/>
            <div>
                <span id="Results"></span>
            </div> 
        </div>

    </form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="true"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <style type="text/css">
        body {  font: 11pt Trebuchet MS;
                font-color: #000000;
                padding-top: 72px;
                text-align: center }

        .text { font: 8pt Trebuchet MS }
    </style>
    <title>Simple WCF Service Page</title>

</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
            <Services>
                <asp:ServiceReference 
                    Path="SimpleService.svc/ws"/>
            </Services>
            <Scripts>
                <asp:ScriptReference Path="service.js" />
            </Scripts>
        </asp:ScriptManager>
        
        <div>
            <h2>Simple WCF Service</h2>
            <input type='button' name="clickme"  value="Greetings" 
                onclick="javascript:OnClick()" /> &nbsp; &nbsp;
            <input type='button' name="clickme2"  value="Greetings2" 
                onclick="javascript:OnClick2()" />
            <hr/>
            <div>
                <span id="Results"></span>
            </div> 
        </div>

    </form>
</body>
</html>
var ServiceProxy;

function pageLoad()
{
    ServiceProxy = new ISimpleService();
    ServiceProxy.set_defaultSucceededCallback(SucceededCallback);
}

function OnClick()
{
    // var myService = new ISimpleService();
    ServiceProxy.HelloWorld1("George");
}

function OnClick2()
{
    var dc = new DataContractType();
    dc.FirstName = "George";
    dc.LastName = "Washington";
    ServiceProxy.HelloWorld2(dc);      
}

// This is the callback function that
// processes the Web Service return value.
function SucceededCallback(result, userContext, methodName)
{
    var RsltElem = document.getElementById("Results");
    RsltElem.innerHTML = result + " from " + methodName + ".";
}
if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();
Imports System
Imports System.Web
Imports System.Collections
Imports System.Collections.Generic
Imports System.Threading
Imports System.Xml
Imports System.Xml.Serialization
Imports System.Text
Imports System.IO
Imports System.Runtime.Serialization
Imports System.ServiceModel
Imports System.ServiceModel.Description
Imports System.ServiceModel.Dispatcher
Imports System.ServiceModel.Channels
Imports System.ServiceModel.Activation


' This a WCF service which consists of a contract, 
' defined below as ISimpleService, and DataContractType, 
' a class which implements that interface, see SimpleService, 
' and configuration entries that specify behaviors associated with 
' that implementation (see <system.serviceModel> in web.config)
Namespace Aspnet.Samples.SimpleService

    <ServiceContract()> _
    Public Interface ISimpleService
        <OperationContract()> _
        Function HelloWorld1(ByVal value1 As String) As String
        <OperationContract()> _
        Function HelloWorld2(ByVal dataContractValue1 _
        As DataContractType) As String
    End Interface 'ISimpleService

    <ServiceBehavior(IncludeExceptionDetailInFaults:=True), _
    AspNetCompatibilityRequirements(RequirementsMode:= _
    AspNetCompatibilityRequirementsMode.Allowed)> _
    Public Class SimpleService
        Implements ISimpleService

        Public Sub New()

        End Sub 'New

        Public Function HelloWorld1(ByVal value1 As String) As String _
        Implements ISimpleService.HelloWorld1
            Return "Hello " + value1
        End Function 'HelloWorld1

        Public Function HelloWorld2(ByVal dataContractValue1 _
        As DataContractType) As String _
        Implements ISimpleService.HelloWorld2
            Return "Hello " + dataContractValue1.FirstName + " " + _
            dataContractValue1.LastName
        End Function 'HelloWorld2
    End Class 'SimpleService

    <DataContract()> _
    Public Class DataContractType
        Private _firstName As String
        Private _lastName As String


        <DataMember()> _
        Public Property FirstName() As String
            Get
                Return _firstName
            End Get
            Set(ByVal value As String)
                _firstName = value
            End Set
        End Property

        <DataMember()> _
        Public Property LastName() As String
            Get
                Return _lastName
            End Get
            Set(ByVal value As String)
                _lastName = value
            End Set
        End Property
    End Class 'DataContractType 
End Namespace

using System;
using System.Web;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using System.Xml;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Channels;
using System.ServiceModel.Activation;

// This a WCF service which consists of a contract, 
// defined below as ISimpleService, and DataContractType, 
// a class which implements that interface, see SimpleService, 
// and configuration entries that specify behaviors associated with 
// that implementation (see <system.serviceModel> in web.config)

namespace Aspnet.Samples
{
    [ServiceContract()]
    public interface ISimpleService
    {
        [OperationContract]
        string HelloWorld1(string value1);
        [OperationContract]
        string HelloWorld2(DataContractType dataContractValue1);
    }

    [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class SimpleService : ISimpleService
    {
        public SimpleService()
        { }

        public string HelloWorld1(string value1)
        {
            return "Hello " + value1;
        }
        public string HelloWorld2(DataContractType dataContractValue1)
        {
            return "Hello " + dataContractValue1.FirstName +
                                " " + dataContractValue1.LastName;
        }
    }

    [DataContract]
    public class DataContractType
    {
        string firstName;
        string lastName;

        [DataMember]
        public string FirstName
        {
            get { return firstName; }
            set { firstName = value; }
        }
        [DataMember]
        public string LastName
        {
            get { return lastName; }
            set { lastName = value; }
        }
    }

}

その他の例

ページのトップへ

クラス リファレンス

クライアント スクリプトから呼び出すことができる Web サービスに関連する主なクラスの一覧を次の表に示します。

クライアントの名前空間

名前

説明

Sys.Net 名前空間

ASP.NET AJAX クライアント アプリケーションとサーバー上の Web サービスの間の通信を管理するクラスを含みます。Sys.Net 名前空間は、Microsoft AJAX Library に属します。

Sys.Serialization 名前空間

ASP.NET AJAX クライアント アプリケーションのデータ シリアル化に関連するクラスを含みます。

Sys.Services 名前空間

ASP.NET AJAX クライアント アプリケーションで、ASP.NET 認証サービス、プロファイル サービス、およびその他のアプリケーション サービスへのスクリプト アクセスを提供する型が含まれます。Sys.Services 名前空間は、Microsoft AJAX Library に属します。

サーバーの名前空間

名前

説明

System.Web.Script.Serialization

マネージ型の JSON (JavaScript Object Notation) シリアル化と逆シリアル化を提供するクラスを含みます。シリアル化動作をカスタマイズするための機能拡張も提供します。

ページのトップへ

その他のリソース

About Native XMLHTTP

http://www.json.org

Windows Communication Foundation とは

XML Web サービス インフラストラクチャ

WCF サービスと ASP.NET

サービス指向アーキテクチャについて

新機能

ASP.NET Version 3.0 の新機能は次のとおりです。

  • Windows Communication Foundation (WCF) 内のアプリケーション サービス

  • .NET Framework クライアント アプリケーションから呼び出される AJAX 内のアプリケーション サービス

ページのトップへ

参照

処理手順

チュートリアル : AJAX 対応の Web サービスの作成と使用

概念

ASP.NET AJAX でのフォーム認証の使用

ASP.NET アプリケーション サービスの概要