0

I'm trying to use the TableStorageSessionStateProvider from the Azure training kit. I can use the example without problems but when I use it in my web app, I get this exception:

System.Data.Services.Client.DataServiceRequestException occurred
  Message=An error occurred while processing this request.
  Source=Microsoft.WindowsAzure.StorageClient
  StackTrace:
       at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result()
       at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.ExecuteAndWait()
       at Microsoft.Samples.ServiceHosting.AspProviders.TableStorageSessionStateProvider.<>c__DisplayClass5.<ResetItemTimeout>b__4()
  InnerException: System.Data.Services.Client.DataServiceClientException
       Message=<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
  <code>UpdateConditionNotSatisfied</code>
  <message xml:lang="en-US">The update condition specified in the request was not satisfied.
RequestId:c552d552-ba1c-4920-84fc-e716705b58b9
Time:2011-02-17T12:43:38.5650557Z</message>
</error>
       Source=System.Data.Services.Client
       StatusCode=412
       StackTrace:
            at System.Data.Services.Client.DataServiceContext.SaveResult.<HandleBatchResponse>d__1e.MoveNext()
       InnerException: 

I've tried this, but no luck so far.I've also seen null reference exceptions happening, so I guess that the TableStorageSessionStateProvider it's not behaving like the InProc one, so maybe I have to check how sessions are being used in the application. But, what could be the problem ?

EDIT: Well, I've find out that the example in the Azure training kit also fails if you only use the TableStorageSessionStateProvider with the same exception. You just have to comment the other providers:

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
</authentication>

<!-- Membership Provider Configuration -->
<!--<membership defaultProvider="TableStorageMembershipProvider" userIsOnlineTimeWindow="20">
  <providers>
    <clear />
    <add name="TableStorageMembershipProvider" type="Microsoft.Samples.ServiceHosting.AspProviders.TableStorageMembershipProvider" description="Membership provider using table storage" applicationName="AzureStore" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" requiresUniqueEmail="true" passwordFormat="Hashed" />
  </providers>
</membership>

<profile>
  <providers>
    <clear />
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
  </providers>
</profile>

--><!-- RoleManager Provider Configuration --><!--
<roleManager enabled="true" defaultProvider="TableStorageRoleProvider" cacheRolesInCookie="true" cookieName=".ASPXROLES" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All">
  <providers>
    <clear />
    <add name="TableStorageRoleProvider" type="Microsoft.Samples.ServiceHosting.AspProviders.TableStorageRoleProvider" description="Role provider using table storage" applicationName="AzureStore" />
  </providers>
</roleManager>-->

<!-- SessionState Provider Configuration -->
<sessionState mode="Custom" customProvider="TableStorageSessionStateProvider">
  <providers>
    <clear />
    <add name="TableStorageSessionStateProvider" type="Microsoft.Samples.ServiceHosting.AspProviders.TableStorageSessionStateProvider" applicationName="AzureStore" />
  </providers>
</sessionState>
    <machineKey decryption="AES" decryptionKey="F7FA540B4DFD82E5BB196B95D15FF81F5B973B5514F973D2A46B4C52224A3ABC" validation="SHA1" validationKey="5B973B5514F973D2A46B4C52224A3ABC90378EFA9DE62168764FF0DCE537184F0535D5D9AD66DEDC5B973B5514F973D2A46B4C52224A3ABC90378EFA97DC1ABF" />

vtortola
  • 34,709
  • 29
  • 161
  • 263
  • I don't know specifically how to fix this but I will warn you that this particular session provider shouldn't be used for a production solution. It doesn't clean up after itself (expired session values are not removed) and its also a bit unstable. If you need a more reliable solution, you may want to check into the Azure AppFabric cache service. It also has a session provider that has proven to be much more reliable. – BrentDaCodeMonkey Feb 17 '11 at 14:48
  • Azure AppFabric is in CTP and in the Terms of Use of the AppFabricLabs say you are not allowed to use it in commercial applications. We are looking for a temporary solution till the 2011 Q2, that is when AppFabric Cache service is supposed to be released (if I'm not wrong). I cannot believe that the options available to share session state are: this crap and something in CTP, because save the session state in SQL Azure is not supported by Microsoft. – vtortola Feb 17 '11 at 15:04

1 Answers1

1

If you want to know why you're getting this error with the TableStorageSessionProvider see my answer to this question. If you want to know about the using the SQL session provider in Azure see the answer to this question.

If you need to use something today, you're only real choice is to use the SQL session provider even though it's not supported. Once AppFabric Caching is out of CTP it will be the way to go.

Community
  • 1
  • 1
knightpfhor
  • 9,299
  • 3
  • 29
  • 42