使用Redis缓存会话状态提供程序的运行时错误

时间:2015-06-03 14:57:23

标签: asp.net-mvc session azure stackexchange.redis

所以我有一个MVC应用程序,我试图在我的会话状态提供程序中使用Azure的Redis缓存。随着一切编码和配置,所有,当我发布它时,索引页面加载正常。要点击的唯一按钮是' Next',它应该添加一个带有值的会话状态变量,然后转到相应的页面。但是当我点击“下一步”时我收到运行时错误。如果我只是在Web.config中注释掉sessionState块并将其发布,那么我可以转到下一个'页面就好了。所以我想知道我使用提供商有什么问题,以及为什么它没有用?

Web.Config块:

  <system.web>
    <compilation debug="false" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
  <sessionState mode="Custom" customProvider="MySessionStateStore">
      <providers>
          <add 
            type="Microsoft.Web.Redis.RedisSessionStateProvider"
            name="MySessionStateStore" 
            host = "[Host name from Azure]"
            port = "[Port # from Azure]"
            accessKey = "[Key from Azure]"
            ssl = "false"
            throwOnError = "true"
            retryTimeoutInMilliseconds = "5000"
            databaseId = "0"
            applicationName = ""
            connectionTimeoutInMilliseconds = "5000"
            operationTimeoutInMilliseconds = "1000"
          />
      </providers>
    </sessionState>
  </system.web>

当我点击&#39;下一步&#39;按钮:

<HttpPost()>
<ValidateAntiForgeryToken()>
Async Function Index(ByVal obj As Type) As Task(Of ActionResult)
    If ModelState.IsValid Then
        Session("VarName") = obj
        Return RedirectToAction("nextPage", "[controller]")
    End If
    Return View()
End Function

注意我没有使用任何cookie,也没有尝试将Redis Cache用于其他任何事情。 Azure中启用了非SSL端口IS(是的,不好,我知道 - 这会改变)。

我希望能继续提供帮助 - 如果没有,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,好吧,在发布之后我发现我找到了答案!

因此,我在Redis会话状态提供商上找到的其中一篇文章的底部有一个非常小的注释:https://msdn.microsoft.com/en-us/library/azure/dn690522.aspx

&#34;请注意,存储在缓存中的数据必须是可序列化的,这与可以存储在默认的内存中ASP.NET会话状态提供程序中的数据不同。使用会话状态提供程序for Redis时,请确保以会话状态存储的数据类型是可序列化的。&#34;

我试图放入会话变量的类型是自定义类型。我不得不添加&#34; Serializable&#34;属于我的班级! 一旦我将其发布为可序列化,那么瞧!