方法 : クライアント アプリケーション サービスを構成する
ここでは、Visual Studio プロジェクト デザイナーを使用して、クライアント アプリケーション サービスを有効にし、構成する方法について説明します。 クライアント アプリケーション サービスを使用してユーザーを検証したり、既存の Microsoft Ajax アプリケーション サービスからユーザー ロールおよびユーザー設定を取得したりすることができます。 「クライアント アプリケーション サービスの概要」に説明されているように、構成後、アプリケーション コードで有効になっているサービスにアクセスできます。 Microsoft Ajax アプリケーション サービスの詳細については、「ASP.NET アプリケーション サービスの概要」を参照してください。
クライアント アプリケーション サービスの有効化および構成は、プロジェクト デザイナーの [サービス] ページで行うことができます。 [サービス] ページは、プロジェクトの App.config ファイルの値を更新します。 プロジェクト デザイナーを表示するには、[プロジェクト] メニューの [プロパティ] をクリックします。 [サービス] ページの詳細については、「[サービス] ページ (プロジェクト デザイナー)」を参照してください。 プロジェクト デザイナーの詳細については、「プロジェクト デザイナーの概要」を参照してください。
クライアント アプリケーション サービスの基本構成の設定方法を、次の手順で説明します。 詳細構成オプションについては、後のセクションで説明します。
クライアント アプリケーション サービスを構成するには
ソリューション エクスプローラーでプロジェクト ノードを選択し、[プロジェクト] メニューの [プロパティ] をクリックします。
プロジェクト デザイナーが表示されます。
[サービス] タブをクリックします。 次の図に示すような [サービス] ページが表示されます。
[サービス] ページで、[クライアント アプリケーション サービスを有効にする] を選択します。
注意
クライアント アプリケーション サービスは、.NET Framework の完全バージョンを必要とし、.Net Framework クライアント プロファイルではサポートされていません。 [クライアント アプリケーション サービスを有効にする] チェック ボックスがオフになっている場合は、ターゲット フレームワークが .NET Framework 3.5 またはそれ以降に設定されていることを確認します。 C# でターゲット フレームワークの設定を表示するには、プロジェクト デザイナーを開き、[アプリケーション] ページをクリックします。 Visual Basic でターゲット フレームワークの設定を表示するには、プロジェクト デザイナーを開き、[コンパイル] ページ、[詳細コンパイル オプション] の順にクリックします。
独自のログイン コントロールまたはダイアログ ボックスを作成する場合には [フォーム認証を使用する] を選択し、オペレーティング システムによって提供される ID を使用する場合には [Windows 認証を使用する] をクリックします。 詳細については、「クライアント アプリケーション サービスの概要」を参照してください。
注意
[Windows 認証を使用する] を選択した場合、クライアント アプリケーション サービスは自動的に SQL Server Compact Edition version 3.5 データベースを使用するように構成されます。 これは [サービスの詳細設定] ダイアログ ボックスで示されます。これについては、次のセクションで説明します。 その後に [フォーム認証を使用する] を選択しても、[カスタム接続文字列を使用] 設定は自動的にオフになりません。 SQL Server Compact 3.5 データベースが Windows 認証で使用するために既に生成されている場合、これがエラーの原因になります。 このエラーを解決するには、[サービスの詳細設定] ダイアログ ボックスで [カスタム接続文字列を使用] 設定をオフにします。
[フォーム認証を使用する] を選択した場合、[認証サービスの場所] ボックスで、サービス ホストの URL を指定する必要があります。このとき、ファイル名は含めません。 デザイナーが、構成ファイルに値を書き込むときに、自動的に標準ファイル名 (Authentication_JSON_AppService.axd) を付け加えます。
[フォーム認証を使用する] を選択した場合、オプションで [資格情報プロバイダーの型名] ボックスに値を指定できます。 資格情報プロバイダーは IClientFormsAuthenticationCredentialsProvider インターフェイスを実装する必要があります。 資格情報プロバイダーを使用することによって、他のアプリケーション コードからログイン ユーザー インターフェイスを分離することができます。 これにより、複数のアプリケーションで使用できる単一のログイン ダイアログ ボックスを作成できます。 詳細については、「方法: クライアント アプリケーション サービスでユーザーのログインを実装する」を参照してください。
資格情報プロバイダーを指定する場合は、アセンブリ修飾型名として指定する必要があります。 詳細については、「Type.AssemblyQualifiedName」および「アセンブリ名」を参照してください。 最も単純な形式では、アセンブリ修飾型名は次の例のようになります。
MyNamespace.MyLoginClass, MyAssembly
[ロール サービスの場所] ボックスと [Web 設定サービスの場所] ボックスに、各サービスの場所を指定します。このとき、ファイル名は含めません。 デザイナーが、構成ファイルに値を書き込むときに、自動的に標準ファイル名 (Role_JSON_AppService.axd と Profile_JSON_AppService.axd) を付け加えます。
オプションで、[詳細設定] をクリックし、ローカル キャッシュ動作などの詳細設定を変更します。 詳細については、次の手順を参照してください。
詳細構成
やや一般的でないシナリオによるクライアント アプリケーション サービスの構成方法を、次の手順で説明します。 たとえば、公の場所に配置されたアプリケーションに対してこれらの構成オプションを使用することも、暗号化された SQL Server Compact Edition version 3.5 データベースをローカル データ キャッシュとして使用するためにこれらの構成オプションを使用することもできます。
クライアント アプリケーション サービスの詳細設定を構成するには
プロジェクト デザイナーの [サービス] ページで [詳細設定] をクリックします。
次の図のような [サービスの詳細設定] ダイアログ ボックスが表示されます。 このダイアログ ボックスの詳細については、「[サービスの詳細設定] ダイアログ ボックス」を参照してください。
[オフラインでログインできるようにパスワードのハッシュをローカルに保存する] をオンまたはオフにします。 このオプションをオンにした場合、ユーザーのパスワードは暗号化された形式でローカルにキャッシュされます。 これは、アプリケーションにオフライン モードを実装する場合に便利です。 このオプションをオンにした場合、IsOffline プロパティが true に設定されている場合でもユーザーの検証を実行できます。 オフライン モードの詳細については、「方法 : クライアント アプリケーション サービスをオフライン モードで操作する」を参照してください。
[サーバー Cookie の期限が切れた場合は常に再度ログオンすることをユーザーに要求する] をオンまたはオフにします。 認証 Cookie はリモート サービスで構成され、ユーザーのログインがアクティブであり続ける期間を示します。 Cookie の構成方法の詳細については、「authentication の forms 要素 (ASP.NET 設定スキーマ)」の timeout 属性を参照してください。
このオプションをオンにした場合は、リモート ロール サービスまたは Web 設定サービスに、認証 Cookie の期限が切れた後にアクセスしようとすると、WebException がスローされます。 この例外を処理し、再度ユーザーを検証するためのログイン ダイアログ ボックスを表示できます。 この動作の例については、「チュートリアル : クライアント アプリケーション サービスの使用」を参照してください。 このオプションは、公の場所に配置されたアプリケーションで、使用後も実行されたままのアプリケーションから離れたユーザーを、無期限に認証済みにしない場合に便利です。
このオプションをオフにした場合は、認証 Cookie の期限が切れた後にユーザーがリモート サービスにアクセスしようとすると、自動的に再検証が行われます。
[ロール サービスのキャッシュのタイムアウト] に値を指定します。 この時間間隔には、ロールが頻繁に更新される場合には小さな値を、ロールの更新頻度が低い場合には大きな値を設定します。 オフライン モードを実装する場合には、アプリケーションがオフラインの間にロール情報が期限切れにならないように大きな値を設定します。
IsInRole メソッドが呼び出されると、ロール プロバイダーはキャッシュされたロール値またはロール サービスにアクセスします。 プログラムによってキャッシュをリセットし、強制的にこのメソッドをリモート サービスにアクセスさせるには、ResetCache メソッドを呼び出します。
[カスタム接続文字列を使用] をオンまたはオフにします。 詳細については、次の手順を参照してください。
ローカル キャッシュ用データベースを使用するようにクライアント アプリケーション サービスを構成するには
プロジェクト デザイナーの [サービス] ページで [詳細設定] をクリックします。
[サービスの詳細設定] ダイアログ ボックスが表示されます。
[カスタム接続文字列を使用] をオンにします。
テキスト ボックスに Data Source = |SQL/CE| という既定値が表示されます。
SQL Server Compact Edition version 3.5 データベースを生成し使用するには、既定の接続文字列値を保持します。Visual Studio はデータベース ファイルを生成し、これを Application.UserAppDataPath プロパティで指定されるディレクトリに格納します。
暗号化された SQL Server Compact 3.5 データベースを生成し使用するには、次の例のように password 値と encrypt database 値を接続文字列に追加します。
注意
強力なパスワードを指定してください。 データベースが生成された後にパスワードを変更することはできません。
Data Source = |SQL/CE|;password=<password>;encrypt database=true
独自の SQL Server データベースを使用するには、独自の接続文字列を指定します。 有効な接続文字列形式については、SQL Server のドキュメントを参照してください。 このデータベースは自動的には生成されません。 接続文字列は、次の SQL ステートメントを使用して作成できる既存のデータベースを参照する必要があります。
CREATE TABLE ApplicationProperties (PropertyName nvarchar(256), PropertyValue nvarchar(256)) CREATE TABLE UserProperties (PropertyName nvarchar(256), PropertyValue nvarchar(256)) CREATE TABLE Roles (UserName nvarchar(256), RoleName nvarchar(256)) CREATE TABLE Settings (PropertyName nvarchar(256), PropertyStoredAs nvarchar(1), PropertyValue nvarchar(2048))
カスタム プロバイダーの使用
既定では、クライアント アプリケーション サービス機能は、System.Web.ClientServices.Providers 名前空間のプロバイダーを使用します。 プロジェクト デザイナーの [サービス] ページを使用してアプリケーションを構成すると、これらのプロバイダーへの参照が App.config ファイルに追加されます。 これらの既定のプロバイダーは、サーバー上の対応するプロバイダーにアクセスします。 Web サービスは、通常、SqlMembershipProvider や SqlRoleProvider などのプロバイダーを介してユーザー データにアクセスするように構成されています。
カスタム サービス プロバイダーを使用する必要がある場合には、通常、サーバー側のプロバイダーを変更するため、そのサーバーにアクセスするすべてのクライアント アプリケーションに影響が出ます。 ただし、クライアント側で既定以外のプロバイダーを使用するという選択肢もあります。 次の手順に示されているように、プロジェクトの App.config ファイルでカスタム認証プロバイダーまたはカスタム ロール プロバイダーを指定することができます。 カスタム認証プロバイダーとカスタム ロール プロバイダーを作成する方法については、「メンバーシップ プロバイダーの実装」および「ロール プロバイダーの実装」を参照してください。 また、プロジェクトの Settings クラス (C# では Properties.Settings.Default、Visual Basic では My.Settings としてアクセス) を変更することにより、カスタム設定プロバイダーを使用することもできます。 詳細については、「アプリケーション設定アーキテクチャ」を参照してください。
既定以外のプロバイダーを使用するようにクライアント アプリケーション サービスを構成するには
既定以外の認証サービス プロバイダーまたはロール サービス プロバイダーを使用するには、まず、[サービス] ページを使用してその他のすべての構成設定を完了します。
プロジェクト デザイナーを終了します。 これは、設定の変更がない場合でも [サービス] ページが App.config ファイルを自動的に更新するため必要です。 ここで説明するように App.config ファイルを手動で変更した後に [サービス] ページに戻ると、変更内容はリセットされます。
ソリューション エクスプローラーで、App.config をダブルクリックします。
アプリケーション構成ファイルがテキスト エディターで開かれます。
<membership> 要素内の <providers> 要素または <roleManager> 要素を検索します。 これらの要素は <system.web> 要素の子です。 <membership> 要素は認証プロバイダーを指定するのに使用され、<roleManager> 要素はロール プロバイダーを指定するのに使用されます。
<providers> 要素の子として <add> 要素を追加します。 次の例に示すように name 属性と type 属性を指定する必要があります。 type 属性値は、アセンブリ修飾型名である必要があります。 詳細については、「Type.AssemblyQualifiedName」および「アセンブリ名」を参照してください。
<add name="MyCustomRoleProvider" type="MyNamespace.MyRoleProvider, MyAssembly" />
<membership> 要素または <roleManager> 要素の defaultProvider 属性を変更して、前の手順で追加した <add> 要素の name 値を指定します。
<roleManager enabled="true" defaultProvider="MyCustomRoleProvider">
参照
処理手順
方法: クライアント アプリケーション サービスでユーザーのログインを実装する
方法 : クライアント アプリケーション サービスをオフライン モードで操作する
チュートリアル : クライアント アプリケーション サービスの使用