6,455 views(since 2013/10/08)

Office用アプリをWindows Azure に配置する方法 5(IIS, ASP セッション管理)

Office用アプリをWindows Azure に配置する方法(Apps for Office)

  1. Office用アプリをWindows Azure に配置する方法 1(Azure Web ロール編)
  2. Office用アプリをWindows Azure に配置する方法 2(SSL編)
  3. Office用アプリをWindows Azure に配置する方法 3(Office Web Apps編)
  4. Office用アプリをWindows Azure に配置する方法 4(SQL Azure編)
  5. Office用アプリをWindows Azure に配置する方法 5(IIS, ASP セッション管理)
  6. Office用アプリをWindows Azure に配置する方法 6(データベースバックアップ)

今回の課題

IIS, ASP で各Webロール(Windows Server)セッション(Session) を共有するために、SQL Azure のデータベースを使用します。

今回は、SQL Azureでセッション管理ができる。[ASP.NET Universal Providers] ライブラリーを使用してASP.NETプログラムのセッションを管理します。

メリット

  1. セッションの期限切れレコードの削除を行う。(セッション設定・削除時に期限切れレコードを削除しているようです)
  2. 初回にセッション管理テーブルがない場合も自動的に作成します。
  3. ASP.NETプログラムには、ライブラリの設定と、Web.Configの設定のみで対応できます。

ほかにも、セッションを管理する方法があります。

  1. メモリを使った高速な[Azure AppFabricキャッシュ]
  2. ストレージテーブル遅いですが安価な[ストレージサービス]
  3. 従来型のSQL ServerのAPS.NETのセッション状態プロバイダーを使用した方法
    欠点:SQL Azureには定期的にコマンドを実行するSQL Server Agenetがないため期限切れセッションのマニュアル削除対応が必要です。

作成手順

1. Visual Studio 2012 SQL Serverの機能確認、なければ、インストールします。

以下の機能がVisual Studio にあるか確認します。(Professional なら標準機能?)

メニューにはこのようなSQL関連のものがあります。

  1. [表示][SQL Server オブジェクト エクスプローラー]
  2. [SQL][SQL Server の追加]

Azure_AppsForOffice5_010

なければ、以下のツールをいれるといいかもしれません。

SSDT for Visaul Studio 2012(SQL Server Data Tools)

http://msdn.microsoft.com/en-us/data/hh297027

Azure_AppsForOffice5_020

[SQL Azure]データベースを追加しておきます。

[Visual Studio][SQL][SQL Server の追加]

Azure_AppsForOffice5_030

追加できると、以下のように[SQL Azure]のデータが参照できます。

Azure_AppsForOffice5_040

2. ASP.NETにセッション管理のプログラムライブラリーを追加

[Microsoft ASP.NET Universal Providers Core Libraries 日本語 リソース 1.2]をダウンロードします。

https://nuget.org/packages/Microsoft.AspNet.Providers.Core.ja/

Azure_AppsForOffice5_050

[Visual Studio][ライブラリーパッケージマネジャー][パッケージマネジャーコンソール]をクリックします。

Azure_AppsForOffice5_060

以下のコマンドを入力して[Enter]を押します。

PM> Install-Package Microsoft.AspNet.Providers.Core.ja

正常に終了すると以下のように”正常に追加されました”と表示されます。

Azure_AppsForOffice5_070

ASP.NETのプロジェクトの参照設定を確認すると、[System.Web.Providers]が確認できます。

Azure_AppsForOffice5_080

もしか存在していない場合はほかのプロジェクトの参照設定に設定されている可能性がありますので、確認します。

[Visual Studio][ツール][ライブラリーパッケージマネジャー][ソリューションのNuGetパッケージの管理]をクリックします。

Azure_AppsForOffice5_090

[NuGet]で[Universal Providers Core Libraries]を選択して[管理]ボタンをクリックします。

Azure_AppsForOffice5_100

もしか間違えていたら修正してください。

Azure_AppsForOffice5_110

3. ASP.NETの Web.Configを修正して、セッション管理の設定をします。

[Visual Studio]で[Web.config]を修正します。

Azure_AppsForOffice6_090

参考にWeb.configファイルを添付しました。

Web.config


<?xml version="1.0" encoding="utf-8"?>
<!--
 ASP.NET アプリケーションの構成方法の詳細については、
 http://go.microsoft.com/fwlink/?LinkId=169433 を参照してください
 -->
<configuration>
 <configSections>
 <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
 <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
 </configSections>

 <!-- SQL Serverの設定 Express Start-->
 <!--
 <connectionStrings>
 <add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=XXXXXXX;Integrated Security=True;MultipleActiveResultSets=True"
 providerName="System.Data.SqlClient" />
 </connectionStrings>
 -->
 <!-- SQL Serverの設定 Express End-->
 <!-- SQL Serverの設定 SQL Azure Start-->
 <connectionStrings>
 <add name="DefaultConnection" connectionString="Server=tcp:r2qyxh7cq1.database.windows.net,1433;Database=sql-test001;User ID=test@r2qyxh7cq1;Password=ここは自分で設定して;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;"
 providerName="System.Data.SqlClient" />
 </connectionStrings>
 <!-- SQL Serverの設定 SQL Azure End-->

 <system.web>
 <!-- 状態管理プロバイダの設定 Start-->
 <sessionState mode="Custom" customProvider="DefaultSessionProvider">
 <providers>
 <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
 </providers>
 </sessionState>
 <!-- 状態管理プロバイダの設定 Start-->

 <compilation debug="true" targetFramework="4.5" />
 <httpRuntime targetFramework="4.5" />
 </system.web>
 <entityFramework>
 <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
 <parameters>
 <parameter value="v11.0" />
 </parameters>
 </defaultConnectionFactory>
 </entityFramework>
 <runtime>
 <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
 <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
 <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
 </dependentAssembly>
 </assemblyBinding>
 </runtime>
</configuration>

4. ローカルでテストをします。

Visual Studioでデバック実行(F5)をおして起動します。

ASP.NETプログラムでセッションに情報を書き出します。

Azure_AppsForOffice5_120

[SQL Azure]を確認すると [dbo.Session] テーブルが自動で作成されます。 セッションレコードも追加されています。

Azure_AppsForOffice5_130

参考

  1. 業務システムでWindows Azureを使うための42の覚え書き
    http://www.atmarkit.co.jp/fdotnet/chushin/azurecasestudy_01/azurecasestudy_01_03.html
  2. Windows Azure AppFabric Cachingでスケールアウトを実現しよう
    http://codezine.jp/article/detail/6007
  3. [Windows Azure Platform編]セッションの一貫性を確保する
    http://itpro.nikkeibp.co.jp/article/COLUMN/20110713/362356/
  4. SQL Azureを実際に活用する
    http://www.atmarkit.co.jp/fdotnet/dnfuture/winazureplatform_03/winazureplatform_03_02.html
  5. TechEDNAセッション:SQL Azureパフォーマンスの考察とトラブルシューティングまとめ
    http://sqlazure.jp/b/sqlazure/664/
  6. ASP.NET Universal Providersによるセッション管理
    http://news.infoseek.co.jp/article/codezine_6405
  7. HighPerformanceSessionStateProvider
    http://takepara.blogspot.jp/2011/08/highperformancesessionstateprovider.html
  8. ASP.NET Universal Providersによるセッション管理
    http://codezine.jp/article/detail/6405?p=2
  9. Windows Azureのパフォーマンスカウンターやログ、トレース
    http://blogs.gine.jp/taka/archives/2158

Filed Under: AzureOffice Add-ins

About the Author

野呂清二(ご連絡はこちらまで (http://www.exceedone.co.jp/inquiry/)

Leave a Reply




If you want a picture to show with your comment, go get a Gravatar.