2

複数のインスタンスで実行しているときに、Azure キャッシュを使用してセッション状態を実装するのに問題があります。これは、さまざまなチュートリアルに従っているときに行ったことです。

1 - キャッシュの設定: 古い Azure 管理ポータルにキャッシュ サービスを追加しましたが、新しいポータルではキャッシュ オプションが見つかりませんでした。

2 - web.config を更新して、以下を含めます。

<configSections>
  <section name="dataCacheClients"
           type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core"
           allowLocation="true"
           allowDefinition="Everywhere" />
</configSections>

<dataCacheClients>
  <dataCacheClient name="default">
    <hosts>
      <host name="superSecretName.cache.windows.net" cachePort="22233" />
    </hosts>
    <securityProperties mode="Message">
      <messageSecurity authorizationInfo="superSecretAuthToken"></messageSecurity>
    </securityProperties>
  </dataCacheClient>
</dataCacheClients>

<system.web>
  <sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
    <providers>
      <add name="AppFabricCacheSessionStoreProvider"
           type="Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache"
           cacheName="default"
           useBlobMode="true" 
           dataCacheClientName="default" />
    </providers>
  </sessionState>
</system.web>

3 - 幸せなダンスを踊って、すべてが壊れて燃え尽きるまで...

チュートリアルと例で読んだことから、これはSession通常どおりコード内を使用し、バックグラウンドでキャッシュを使用するのに十分なはずです。ただし、ランダムにサイトがクラッシュしたように見えますが、セッションにデータが入力されていないことが原因であることがわかりました。既にセッションに入れられているデータにアクセスしようとすると、null 参照例外が発生します。私が思いついた唯一の説明は、Azure インスタンスが切り替えられ、キャッシュが実際にはインスタンス間で分散されていないということでした (私は間違っているかもしれませんが)。

また、セッションを使用せずにカスタム Cookie を使用して、キャッシュに保存し、Cookie 値を使用してキャッシュからデータを取得しようとしましたが、同じことが起こっていたので、そうではないと推測していますセッションですが、基礎となるキャッシングが壊れています。

タイトルにあるとおり、Azure のバージョンは 1.4 です。私が使用した例が新しいバージョンのものである可能性は十分にあります。他の多くのライブラリが破損する可能性があるため、新しいバージョンの Azure に切り替えることはできません。

4

0 に答える 0