WindiwsAzure下使用Cache服务共享Session的方法

来源:互联网 发布:制作动画片的软件 编辑:程序博客网 时间:2024/05/29 05:56
 

WindiwsAzure下使用Cache服务共享Session的方法

    在WindowsAzure上发布多实例的WebRole(即:WebRole的InstanceCount大于1)后,由于Azure的负载平衡程序会循环调用多个实例,所以,一般的默认存储在内存中的Session将出现混乱而直接导致应用程序瘫痪。

    为了解决该问题,可以把Session存储在SQL Azure中,来达到多个实例共享Session的目的。但是,在此笔者提供另外一种存储Session的方式:使用AppFabric Cache服务存储Session。

    操作步骤如下:

1、开通AppFabric Cache服务。

    访问http://portal.appfabriclabs.com 这个CTP门户,在门户上选择“Cache”(缓存)选项,然后单击“New Namespace”(新命名空间)创建新的缓存。在弹出的对话框中设置唯一的服务命名空间和缓存大小,确定后即可开通。然后,会得到一个Service URL(服务URL)和Authentication Token(身份验证令牌)。服务 URL 是您的应用程序与 Caching 服务交互时要连接的 TCP 终结点。 身份验证令牌是要传递到 Access Control 的加密令牌,用于验证您的服务。

 

2、在Azure项目的WebRole中,添加AppFabric SDK提供的所有程序集。

这些程序集包括:

Microsoft.ApplicationService.Caching.Client

Microsoft.ApplicationService.Caching.Core

Microsoft.Web.DistributedCache

Microsoft.WindowsFabric.Common

Microsoft.WindowsFabric.Data.Common

 

3、修改Web.config文件使应用程序启用AppFabric Cache。

    使 <configuration> 元素之后紧跟 <configSections> 和 <dataCacheClient> 元素(如果紧跟的是别的元素,您将收到错误)。

<?xml version="1.0"?><configuration>  <configSections>    <section name="dataCacheClient" type="Microsoft.ApplicationServer.Caching.DataCacheClientSection, Microsoft.ApplicationServer.Caching.Core"          allowLocation="true"   allowDefinition="Everywhere"/>  </configSections>  <dataCacheClient>    <hosts>      <host name="YOURCACHE.cache.windows.net" cachePort="22233"/>    </hosts>    <securityProperties mode="Message">      <messageSecurity authorizationInfo="YOURTOKEN" />    </securityProperties>  </dataCacheClient>  </configuration>


 

4、修改Web.config文件使应用程序的Session存储在Cache服务中。

<?xml version="1.0"?><configuration>  <system.web>  <sessionState mode="Custom" timeout="20" customProvider="AppFabricCacheSessionStoreProvider">    <providers>      <add name="AppFabricCacheSessionStoreProvider"           type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache"           cacheName="default"/>    </providers>  </sessionState>  </system.web>  </configuration>

 

    到此,已经完成把Session存储在Cache服务所需要的所有设置步骤,现在再存储Session,Session的值就已经保存在Cache服务中,并可以在多个实例间共享了,读者可以自己创建例子测试,在此不再赘述。

    在Cache服务中,既然可以存储Session的值,当然可以存储应用程序所有想存储的值,比如:用户的登录名,计算的中间结果等等。具体的操作示例如下:

        static void Main(string[] args)        {            DataCacheFactory dataCacheFactory = new DataCacheFactory();            DataCache dataCache = dataCacheFactory.GetDefaultCache();            Console.Write("Enter a value: ");            string value = Console.ReadLine();            dataCache.Put("key", value);            string response = (string)dataCache.Get("key");            Console.WriteLine("Your value: " + response);        }


 

最后,总结Caching 服务为开发人员提供的功能有:

1、针对会话状态和页面输出缓存的预置 ASP.NET 提供程序,使您无需修改应用程序代码即可加速 Web 应用程序。

2、缓存所有托管的对象,而且对于对象大小没有限制,没有本地缓存所需的序列化开销。

 


 

 

 

 

原创粉丝点击