所以我有一个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(是的,不好,我知道 - 这会改变)。
我希望能继续提供帮助 - 如果没有,请告诉我。谢谢!
答案 0 :(得分:0)
好吧,好吧,在发布之后我发现我找到了答案!
因此,我在Redis会话状态提供商上找到的其中一篇文章的底部有一个非常小的注释:https://msdn.microsoft.com/en-us/library/azure/dn690522.aspx
&#34;请注意,存储在缓存中的数据必须是可序列化的,这与可以存储在默认的内存中ASP.NET会话状态提供程序中的数据不同。使用会话状态提供程序for Redis时,请确保以会话状态存储的数据类型是可序列化的。&#34;
我试图放入会话变量的类型是自定义类型。我不得不添加&#34; Serializable&#34;属于我的班级! 一旦我将其发布为可序列化,那么瞧!