ASP.NET AJAX 認証とプロファイル アプリケーション サービスについて理解する

作成者: Scott Cate

認証サービスを使用すると、ユーザーは認証 Cookie を受け取るために資格情報を提供でき、ASP.NET によって提供されるカスタム ユーザー プロファイルを許可するゲートウェイ サービスです。 ASP.NET AJAX 認証サービスの使用は、標準の ASP.NET フォーム認証と互換性があるため、現在フォーム認証 (ログイン コントロールなど) を使用しているアプリケーションは、AJAX 認証サービスにアップグレードしても破損しません。

はじめに

.NET Framework 3.5 の一部として、Microsoft は大きな環境アップグレードを提供します。新しい開発環境が利用できるだけでなく、新しい言語統合クエリ (LINQ) 機能やその他の言語の機能強化も予定されています。 さらに、他のツールセットの使い慣れた一部の機能 (特に ASP.NET AJAX 拡張機能) は、.NET Framework 基本クラス ライブラリのファースト クラス メンバーとして含まれています。 これらの拡張機能を使用すると、ページ全体の更新を必要としないページの部分的なレンダリング、クライアント スクリプト (ASP.NET プロファイル API を含む) を介して Web サービスにアクセスする機能、ASP.NET サーバー側コントロール セットに表示される多くの制御スキームをミラーするように設計された広範なクライアント側 API など、豊富なクライアント機能を実現できます。

このホワイトペーパーでは、Microsoft ASP.NET AJAX 拡張機能によって公開される ASP.NET プロファイルおよびフォーム認証サービスの実装と使用について説明します。AJAX 拡張機能は、Web サービス プロキシ スクリプトを介して公開されるため、フォーム認証を非常に簡単にサポートできます。 AJAX 拡張機能では、AuthenticationServiceManager クラスを使用したカスタム認証もサポートされています。

このホワイトペーパーは、Visual Studio 2008 のベータ 2 リリースおよび .NET Framework 3.5 に基づいています。 また、このホワイトペーパーでは、Visual Web Developer Express ではなく Visual Studio 2008 Beta 2 を使用することを前提としており、Visual Studio のユーザー インターフェイスに従ってチュートリアルを提供します。 一部のコード サンプルでは、Visual Web Developer Express で使用できないプロジェクト テンプレートを利用する場合があります。

プロファイルと認証

Microsoft ASP.NET プロファイルと認証サービスは、ASP.NET フォーム認証システムによって提供され、ASP.NET の標準コンポーネントです。 ASP.NET AJAX 拡張機能は、クライアント AJAX ライブラリの Sys.Services 名前空間の下にある比較的単純なモデルを使用して、スクリプト プロキシを介してこれらのサービスへのスクリプト アクセスを提供します。

認証サービスを使用すると、ユーザーは認証 Cookie を受け取るために資格情報を提供でき、ASP.NET によって提供されるカスタム ユーザー プロファイルを許可するゲートウェイ サービスです。 ASP.NET AJAX 認証サービスの使用は、標準の ASP.NET フォーム認証と互換性があるため、現在フォーム認証 (ログイン コントロールなど) を使用しているアプリケーションは、AJAX 認証サービスにアップグレードしても破損しません。

プロファイル サービスを使用すると、認証サービスによって提供されるメンバーシップに基づいて、ユーザー データの自動統合とストレージが可能になります。 格納されたデータは web.config ファイルによって指定され、さまざまなプロファイル サービス プロバイダーがデータ管理を処理します。 認証サービスと同様に、AJAX プロファイル サービスは標準の ASP.NET プロファイル サービスと互換性があるため、ASP.NET プロファイル サービスの機能を現在組み込んでいるページは、AJAX のサポートを含めることで壊れることはありません。

ASP.NET 認証サービスとプロファイル サービス自体をアプリケーションに組み込むことは、このホワイトペーパーの範囲外です。 このトピックの詳細については、https://msdn.microsoft.com/library/tw292whz.aspx にあるMSDN ライブラリのリファレンス記事「メンバーシップを使用したユーザーの管理」を参照してください。 ASP.NET には、ASP.NET メンバーシップの既定の認証サービス プロバイダーである SQL Server でメンバーシップを自動的に設定するユーティリティも含まれています。 詳細については、https://msdn.microsoft.com/library/ms229862(vs.80).aspx にある「ASP.NET SQL Server 登録ツール (Aspnet_regsql.exe)」の記事を参照してください。

ASP.NET AJAX 認証サービスの使用

ASP.NET AJAX 認証サービスは、web.config ファイルで有効にする必要があります:

<system.web.extensions> 
 <scripting>
 <webServices>
 <authenticationService enabled="true" /> 
 </webServices>
 </scripting> 
</system.web.extensions>

認証サービスでは、ASP.NET フォーム認証を有効にする必要があり、クライアント ブラウザーで Cookie を有効にする必要があります (Cookie なしのセッションには URL パラメーターが必要であるため、スクリプトで Cookie なしのセッションを有効にすることはできません)。

AJAX 認証サービスを有効にして構成すると、クライアント スクリプトはすぐに Sys.Services.AuthenticationService オブジェクトを利用できます。 主に、クライアント スクリプトは login メソッドと isLoggedIn プロパティを利用する必要があります。 多数のパラメーターを受け取ることができるログイン メソッドの既定値を提供するために、いくつかのプロパティが存在します。

Sys.Services.AuthenticationService メンバー

ログイン方法:

login() メソッドは、ユーザーの資格情報を認証するための要求を開始します。 このメソッドは非同期であり、実行をブロックしません。

パラメーター:

パラメーター名 意味
userName 必須。 認証するユーザー名。
password 省略可能 (既定値は null です)。 ユーザーのパスワード。
isPersistent 省略可能 (既定値は false です)。 ユーザーの認証 Cookie をセッション間で保持するかどうか。 false の場合、ブラウザーが閉じられるかセッションの有効期限が切れると、ユーザーはログアウトします。
redirectUrl 省略可能 (既定値は null)。認証が成功したときにブラウザーをリダイレクトする URL。 このパラメーターが null または空の文字列の場合、リダイレクトは行われません。
customInfo 省略可能 (既定値は null です)。 このパラメーターは現在使用されておらず、将来使用するために備えられています。
loginCompletedCallback 省略可能 (既定値は null)。ログインが正常に完了したときに呼び出す関数。 指定した場合、このパラメーターは defaultLoginCompleted プロパティをオーバーライドします。
failedCallback 省略可能 (既定値は null)。ログインに失敗したときに呼び出す関数。 指定した場合、このパラメーターは defaultFailedCallback プロパティをオーバーライドします。
userContext 省略可能 (既定値は null です)。 コールバック関数に渡す必要があるカスタム ユーザー コンテキスト データ。

戻り値:

この関数には戻り値は含まれません。 ただし、この関数の呼び出しが完了すると、いくつかの動作が作動します:

  • redirectUrl パラメーターが null でも空の文字列でもない場合、現在のページは更新されるか、変更されます。
  • ただし、パラメーターが null または空の文字列の場合は、 loginCompletedCallback パラメーターまたは defaultLoginCompletedCallback プロパティが呼び出されます。
  • Web サービスの呼び出しが失敗した場合は、defaultFailedCallback プロパティの failedCallback パラメーターが呼び出されます。

logout メソッド:

logout() メソッドは、資格情報 Cookie を削除し、現在のユーザーを Web アプリケーションからログアウトします。

パラメーター:

パラメーター名 意味
redirectUrl 省略可能 (既定値は null)。認証が成功したときにブラウザーをリダイレクトする URL。 このパラメーターが null または空の文字列の場合、リダイレクトは行われません。
logoutCompletedCallback 省略可能 (既定値は null)。ログアウトが正常に完了したときに呼び出す関数。 指定した場合、このパラメーターは defaultLogoutCompleted プロパティをオーバーライドします。
failedCallback 省略可能 (既定値は null)。ログインに失敗したときに呼び出す関数。 指定した場合、このパラメーターは defaultFailedCallback プロパティをオーバーライドします。
userContext 省略可能 (既定値は null です)。 コールバック関数に渡す必要があるカスタム ユーザー コンテキスト データ。

戻り値:

この関数には戻り値は含まれません。 ただし、この関数の呼び出しが完了すると、いくつかの動作が作動します:

  • redirectUrl パラメーターが null でも空の文字列でもない場合、現在のページは更新されるか、変更されます。
  • ただし、パラメーターが null または空の文字列の場合は、 logoutCompletedCallback パラメーターまたは defaultLogoutCompletedCallback プロパティが呼び出されます。
  • Web サービスの呼び出しが失敗した場合は、defaultFailedCallback プロパティの failedCallback パラメーターが呼び出されます。

defaultFailedCallback プロパティ (get, set):

このプロパティは、Web サービスとの通信に失敗した場合に呼び出す必要がある関数を指定します。 デリゲート (または関数参照) を受け取る必要があります。

このプロパティで指定される関数参照には、次のシグネチャが必要です:

function AuthenticationFailureCallback(error, userContext, methodName);

パラメーター:

パラメーター名 意味
エラー エラー情報を指定します。
userContext ログインまたはログアウト関数が呼び出されたときに提供されるユーザー コンテキスト情報を指定します。
methodName 呼び出し元のメソッドの名前。

defaultLoginCompletedCallback プロパティ (get, set):

このプロパティは、ログイン Web サービスの呼び出しが完了したときに呼び出す必要がある関数を指定します。 デリゲート (または関数参照) を受け取る必要があります。

このプロパティで指定される関数参照には、次のシグネチャが必要です:

function AuthenticationLoginCompletedCallback(validCredentials, userContext, methodName);

パラメーター:

パラメーター名 意味
validCredentials ユーザーが有効な資格情報を指定したかどうかを指定します。 ユーザーが正常にログインした場合は true。それ以外の場合は false
userContext ログイン関数が呼び出されたときに提供されるユーザー コンテキスト情報を指定します。
methodName 呼び出し元のメソッドの名前。

defaultLogoutCompletedCallback プロパティ (get, set):

このプロパティは、ログアウト Web サービスの呼び出しが完了したときに呼び出す必要がある関数を指定します。 デリゲート (または関数参照) を受け取る必要があります。

このプロパティで指定される関数参照には、次のシグネチャが必要です:

function AuthenticationLogoutCompletedCallback(result, userContext, methodName);

パラメーター:

パラメーター名 意味
結果 このパラメーターは常に null になります。将来の使用のために備えられています。
userContext ログイン関数が呼び出されたときに提供されるユーザー コンテキスト情報を指定します。
methodName 呼び出し元のメソッドの名前。

isLoggedIn プロパティ (get):

このプロパティは、ユーザーの現在の認証状態を取得します。これは、ページ要求中に ScriptManager オブジェクトによって設定されます。

このプロパティは、ユーザーが現在ログインしている場合は true を返します。それ以外の場合は、false を返します。

path プロパティ (get、set):

このプロパティは、認証 Web サービスの場所をプログラムごとに決定します。 これを使用すると、既定の認証プロバイダーをオーバーライドできます。また、ScriptManager コントロールの AuthenticationService 子ノードの Path プロパティで宣言的に設定することもできます (詳細については、以下の「カスタム認証サービス プロバイダーの使用」に関するトピックを参照してください)。

既定の認証サービスの場所は変更されないことに注意してください。 ただし、ASP.NET AJAX では、ASP.NET AJAX 認証サービス プロキシと同じクラス インターフェイスを提供する Web サービスの場所を指定できます。

また、このプロパティは、スクリプト要求を現在のサイトではない場所に送信する値に設定しないでください。 現在のアプリケーションは認証資格情報を受け取らないので、役に立ちません。また、AJAX の基になるテクノロジは、クロスサイト要求を投稿しないでください。クライアント ブラウザーでセキュリティ例外が生成される可能性があります。

このプロパティは、認証 Web サービスへのパスを表す String オブジェクトです。

timeout プロパティ (get、set):

このプロパティは、ログイン要求が失敗したと想定する前に、認証サービスを待機する時間の長さを決定します。 呼び出しの完了を待っている間にタイムアウトが切れると、呼び出しは完了せず、要求に失敗コールバックが呼び出されます。

このプロパティは、認証サービスからの結果を待機するミリ秒数を表す Number オブジェクトです。

コード サンプル: 認証サービスへのログイン

次のマークアップは、AuthenticationService クラスのログインメソッドとログアウトメソッドを簡単にスクリプトで呼び出す ASP.NET ページの例です。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
 <title>Login Example</title>
 <script type="text/javascript">
 function Login()
 {
 var userTextbox = $get("txtUser");
 var passTextbox = $get("txtPassword");
 Sys.Services.AuthenticationService.login(userTextbox.value, 
 passTextbox.value, false, null, null, LoginServiceCompleted, 
 LoginServiceFailed, "Context Info");
 }
 function Logout()
 {
 Sys.Services.AuthenticationService.logout(null, LogoutServiceCompleted, 
 LoginServiceFailed, "Context Info");
 }
 function LoginServiceFailed(error, userContext, methodName)
 {
 alert('There was an error with the authentication service:\n\n' + error);
 }
 function LoginServiceCompleted(validCredentials, userContext, methodName)
 {
 if (validCredentials)
 {
 alert('Great! You successfully logged in.');
 }
 else
 {
 alert('Oops! You gave us bad credentials!');
 }
 }
 function LogoutServiceCompleted(result, userContext, methodName)
 {
 alert('You have been logged out from the web site.');
 }
 </script>
 </head>
 <body>
 <form id="form1" runat="server">
 <asp:ScriptManager ID="ScriptManager1" runat="server" 
 EnableScriptLocalization="true">
 </asp:ScriptManager>
 <div>
 <asp:TextBox ID="txtUser" runat="Server"></asp:TextBox>
 <br />
 <asp:TextBox ID="txtPassword" runat="Server" TextMode="Password"/>
 <br />
 <asp:Button Text="Log in" ID="btnLogin" runat="server" 
 OnClientClick="Login(); return false;" />
 </div>
 </form>
 </body>
</html>

AJAX を使用した ASP.NET プロファイル データへのアクセス

ASP.NET プロファイル サービスは、ASP.NET AJAX 拡張機能を介して公開されます。 ASP.NET プロファイル サービスは、ユーザー データの格納と取得に使用する豊富できめ細かい API を提供するため、優れた生産性ツールになる可能性があります。

プロファイル サービスは web.config で有効にする必要があります。既定では使用されません。 これを行うには、web.config で profileService 子要素が有効 = true に指定されていること、および次のように読み取りまたは書き込み可能なプロパティを指定していることを確認します:

<system.web.extensions>
 <scripting>
 <webServices>
 <profileService enabled="true"
 readAccessProperties= Name,Address,BackgroundColor 
 writeAccessProperties= BackgroundColor />
 </webServices>
 </scripting>
</system.web.extensions>

プロファイル サービスも構成する必要があります。 プロファイル サービスの構成はこのホワイト ペーパーの範囲外ですが、プロファイル構成設定で定義されているグループにはグループ名のサブプロパティとしてアクセスできます。 たとえば、次のプロファイル セクションを指定すると:

<profile enabled="true">
 <properties>
 <add name="Name" type="System.String"/>
 <group name="Address">
 <add name="Line1" type="System.String"/>
 <add name="Line2" type="System.String"/>
 <add name="City" type="System.String"/>
 <add name="State" type="System.String"/>
 <add name="Zip" type="System.String"/>
 </group>
 <add name="BackgroundColor" type="System.Drawing.Color"/>
 </properties>
</profile>

クライアント スクリプトは、Name、Address.Line1、Address.Line2、Address.City、Address.State、Address.Zip、BackgroundColor に ProfileService クラスのプロパティ フィールドのプロパティとしてアクセスできます。

AJAX プロファイリング サービスが構成されると、すぐにページで使用できるようになります。ただし、使用する前に 1 回読み込む必要があります。

Sys.Services.ProfileService メンバー

プロパティ フィールド:

プロパティ フィールドは、構成されているすべてのプロファイル データを、ドット演算子名規則で参照できる子プロパティとして公開します。 プロパティ グループの子であるプロパティは、GroupName.PropertyName と呼ばれます。 上記のプロファイル構成例では、ユーザーの状態を取得するために、次の識別子を使用できます:

Sys.Services.ProfileService.properties.Address.State

Load メソッド:

選択したリストまたはすべてのプロパティをサーバーから読み込みます。

パラメーター:

パラメーター名 意味
propertyNames 省略可能 (既定値は null です)。 サーバーから読み込むプロパティ。
loadCompletedCallback 省略可能 (既定値は null です)。 読み込みが完了したときに呼び出す関数。
failedCallback 省略可能 (既定値は null です)。 エラーが発生した場合に呼び出す関数。
userContext 省略可能 (既定値は null です)。 コールバック関数に渡されるコンテキスト情報。

load 関数には戻り値がありません。 呼び出しが正常に完了すると、loadCompletedCallback パラメーターまたは defaultLoadCompletedCallback プロパティのいずれかが呼び出されます。 呼び出しに失敗した場合、またはタイムアウトの有効期限が切れた場合は、failedCallback パラメーターまたは defaultFailedCallback プロパティが呼び出されます。

propertyNames パラメーターが指定されていない場合、すべての読み取り構成済みプロパティがサーバーから取得されます。

Save メソッド:

save() メソッドは、指定したプロパティ リスト (またはすべてのプロパティ) をユーザーの ASP.NET プロファイルに保存します。

パラメーター:

パラメーター名 意味
propertyNames 省略可能 (既定値は null です)。 サーバーに保存するプロパティ。
saveCompletedCallback 省略可能 (既定値は null です)。 保存時が完了した時に呼び出す関数。
failedCallback 省略可能 (既定値は null です)。 エラーが発生した場合に呼び出す関数。
userContext 省略可能 (既定値は null です)。 コールバック関数に渡されるコンテキスト情報。

save 関数には戻り値がありません。 呼び出しが正常に完了すると、saveCompletedCallback パラメーターまたは defaultSaveCompletedCallback プロパティのいずれかが呼び出されます。 呼び出しに失敗した場合、またはタイムアウトの有効期限が切れた場合は、failedCallback または defaultFailedCallback プロパティが呼び出されます。

propertyNames パラメーターが null の場合、すべてのプロファイル プロパティがサーバーに送信され、保存できるプロパティと保存できないプロパティがサーバーによって決定されます。

defaultFailedCallback プロパティ (get, set):

このプロパティは、Web サービスとの通信に失敗した場合に呼び出す必要がある関数を指定します。 デリゲート (または関数参照) を受け取る必要があります。

このプロパティで指定される関数参照には、次のシグネチャが必要です:

function AuthenticationFailureCallback(error, userContext, methodName);

パラメーター:

パラメーター名 意味
エラー エラー情報を指定します。
userContext 読み込みまたは保存関数が呼び出されたときに提供されるユーザー コンテキスト情報を指定します。
methodName 呼び出し元のメソッドの名前。

defaultSaveCompleted プロパティ (get, set):

このプロパティは、ユーザーのプロファイル データの保存が完了したときに呼び出す必要がある関数を指定します。 デリゲート (または関数参照) を受け取る必要があります。

このプロパティで指定される関数参照には、次のシグネチャが必要です:

function ProfileSaveComplete(numPropsSaved, userContext, methodName);

パラメーター:

パラメーター名 意味
numPropsSaved 保存されたプロパティの数を指定します。
userContext 読み込みまたは保存関数が呼び出されたときに提供されるユーザー コンテキスト情報を指定します。
methodName 呼び出し元のメソッドの名前。

defaultLoadCompleted プロパティ (get, set):

このプロパティは、ユーザーのプロファイル データの読み込みが完了したときに呼び出す必要がある関数を指定します。 デリゲート (または関数参照) を受け取る必要があります。

このプロパティで指定される関数参照には、次のシグネチャが必要です:

function ProfileLoadComplete(numPropsLoaded, userContext, methodName);

パラメーター:

パラメーター名 意味
numPropsLoaded 読み込まれるプロパティの数を指定します。
userContext 読み込みまたは保存関数が呼び出されたときに提供されるユーザー コンテキスト情報を指定します。
methodName 呼び出し元のメソッドの名前。

path プロパティ (get、set):

このプロパティは、プロファイル Web サービスの場所をプログラムによって決定します。 これを使用して、既定のプロファイル サービス プロバイダーと、ScriptManager コントロールの ProfileService 子ノードの Path プロパティで宣言的に設定されているプロバイダーをオーバーライドできます。

既定のプロファイル サービスの場所は変更されないことに注意してください。 ただし、ASP.NET AJAX では、ASP.NET AJAX 認証サービス プロキシと同じクラス インターフェイスを提供する Web サービスの場所を指定できます。

また、このプロパティは、スクリプト要求を現在のサイトではない場所に送信する値に設定しないでください。 AJAX の基になるテクノロジは、クロスサイト要求を投稿してはいけません。クライアント ブラウザーでセキュリティ例外が生成される可能性があります。

このプロパティは、プロファイル Web サービスへのパスを表す String オブジェクトです。

timeout プロパティ (get、set):

このプロパティは、読み込みまたは保存要求が失敗したと想定する前に、プロファイル サービスを待機する時間の長さを決定します。 呼び出しの完了を待っている間にタイムアウトが切れると、呼び出しは完了せず、要求に失敗コールバックが呼び出されます。

このプロパティは、プロファイル サービスからの結果を待機するミリ秒数を表す Number オブジェクトです。

コード サンプル: ページ読み込み時のプロファイル データの読み込み

次のコードは、ユーザーが認証されているかどうかを確認し、認証されている場合は、ユーザーの優先背景色をページの背景色として読み込みます。

function Page_Load()
{
 if (Sys.Services.AuthenticationService.get_isLoggedIn())
 {
 Sys.Services.ProfileService.load();
 }
}
function ProfileLoaded(numPropsLoaded, userContext, methodName)
{
 document.documentElement.style.backgroundColor = Sys.Services.ProfileService.properties.BackgroundColor;
}

カスタム認証サービス プロバイダーの使用

ASP.NET AJAX 拡張機能を使用すると、カスタム Web サービスを介して機能を公開することで、カスタム スクリプト認証サービス プロバイダーを作成できます。 これを使用するには、Web サービスは 2 つのメソッド、LoginLogout を公開する必要があります。これらのメソッドは、既定の ASP.NET AJAX 認証 Web サービスと同じメソッド シグネチャを使用して指定する必要があります。

カスタム Web サービスを作成したら、ページ上で宣言的に、コード内で、またはクライアント スクリプトを使用して、その Web サービスへのパスを指定する必要があります。

パスを宣言的に設定するには:

パスを宣言的に設定するには、ASP.NET ページの ScriptManager オブジェクトの AuthenticationService 子を含めます:

<asp:ScriptManager ID="ScriptManager1" runat="server">
 <AuthenticationService Path="~/AuthService.asmx" />
</asp:ScriptManager>

コード内でパスを設定するには:

プログラムによってパスを設定するには、スクリプト マネージャーのインスタンスを使用してパスを指定します:

protected void Page_Load(object sender, EventArgs e)
{
    this.ScriptManager1.AuthenticationService.Path = "~/AuthService.asmx";
}

スクリプトでパスを設定するには:

スクリプトでプログラムによってパスを設定するには、AuthenticationService クラスの path プロパティを使用します:

function Login()
{
 var userTextbox = $get("txtUser");
 var passTextbox = $get("txtPassword");
 Sys.Services.AuthenticationService.set_path("./AuthService.asmx");
 Sys.Services.AuthenticationService.login(userTextbox.value, passTextbox.value, false, null, null, LoginServiceCompleted, LoginServiceFailed, "Context Info");
}

カスタム認証のサンプル Web サービス

<%@ WebService Language="C#" Class="AuthService" %>
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;
[ScriptService]
[WebService]
public class AuthService : WebService
{
 [WebMethod]
 public bool Login(string userName, string password, bool createCookie)
 {
 Session["LoggedInUser"] = userName;
 return true;
 }
 [WebMethod]
 public void Logout()
 {
 Session.Abandon();
 }
}

まとめ

ASP.NET サービス (特にプロファイル、メンバーシップ、認証サービス) は、クライアント ブラウザーで JavaScript に簡単に公開されます。 これにより、開発者は、UpdatePanels などのコントロールに依存せずに、クライアント側のコードを認証メカニズムとシームレスに統合することができます。 プロファイル データは、Web 構成設定を使用して、クライアントからも保護できます。既定ではデータは使用できず、開発者はプロパティのプロファイルをオプトインする必要があります。

さらに、同等のメソッド シグネチャを使用して簡略化された Web サービス実装を作成することで、開発者はこれらの組み込みの ASP.NET サービス用のカスタム スクリプト プロバイダーを作成できます。 これらの手法のサポートにより、リッチ クライアント アプリケーションの開発が簡素化され、開発者は特定のニーズを満たすさまざまな柔軟性が提供されます。

略歴

Scott Cate 氏は 1997 年から Microsoft Web テクノロジに従事しており、ナレッジ ベース ソフトウェア ソリューションに焦点を当てた ASP.NET ベースのアプリケーションの作成を専門とする myKB.com (www.myKB.com) の社長です。 問い合わせは、メール: scott.cate@myKB.com、またはブログ: ScottCate.com まで。