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

作成者: Scott Cate

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

はじめに

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

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

このホワイトペーパーは、Visual Studio 2008 および .NET Framework 3.5 のベータ 2 リリースに基づいています。 このホワイトペーパーでは、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 Extensions は、クライアント AJAX ライブラリの Sys.Services 名前空間の下にある非常に簡単なモデルを使用して、スクリプト プロキシを介してこれらのサービスへのスクリプト アクセスを提供します。

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

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

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

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 オブジェクトをすぐに利用できます。 主に、クライアント スクリプトは メソッドと isLoggedIn プロパティをlogin利用する必要があります。 多数のパラメーターを受け取ることができるログイン メソッドの既定値を提供するために、いくつかのプロパティが存在します。

Sys.Services.AuthenticationService メンバー

login メソッド:

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

パラメーター:

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

戻り値:

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

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

logout メソッド:

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

パラメーター:

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

戻り値:

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

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

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

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

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

function AuthenticationFailureCallback(error, userContext, methodName);

パラメーター:

パラメーター名 意味
error エラー情報を指定します。
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 プロパティで宣言的に設定したりできます (詳細については、以下の「カスタム認証サービス プロバイダーの使用」トピックを参照してください)。

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

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

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

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 Extensions を介して公開されます。 ASP.NET プロファイル サービスは、ユーザー データを格納および取得するための豊富で詳細な API を提供するため、これは優れた生産性ツールになる可能性があります。

プロファイル サービスは、web.configで有効にする必要があります。これは既定では行われません。 これを行うには、子要素が profileService web.configで 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>

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

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

Sys.Services.ProfileService メンバー

properties フィールド:

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

Sys.Services.ProfileService.properties.Address.State

load メソッド:

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

パラメーター:

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

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

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

save メソッド:

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

パラメーター:

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

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

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

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

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

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

function AuthenticationFailureCallback(error, userContext, methodName);

パラメーター:

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

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

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

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

function ProfileSaveComplete(numPropsSaved, userContext, methodName);

パラメーター:

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

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

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

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

function ProfileLoadComplete(numPropsLoaded, userContext, methodName);

パラメーター:

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

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

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

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

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

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

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 つのメソッド と Logoutを公開する必要があります。これらのメソッドは、Login既定の ASP.NET AJAX 認証 Web サービスと同じメソッド シグネチャで指定する必要があります。

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

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

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

<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 は、電子メールまたは scott.cate@myKB.comScottCate.com のブログから連絡を受けることができます