如何解决“提供商必须实现类'System.Web.SessionState.SessionStateStoreProviderProviderBase'错误asp.net

时间:2019-07-08 09:27:10

标签: asp.net redis azure-caching

我正在尝试为Redis实现Azure缓存,以管理应用程序中的会话。这在本地主机上工作。托管到IIS后,webconfig文件中出现编译错误。

我已经在Azure门户中为Redis创建了Azure缓存。我已经对代码进行了相应的更改。当我在本地主机上运行源代码时,它可以正常工作。托管到IIS后出现以下错误

  

“提供者必须实现该类
  System.Web.SessionState.SessionStateStoreProviderBase

<sessionState mode="Custom" customProvider="MySessionStateStore">
      <providers>
        <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="myhostname" accessKey="Key1" ssl="true" />
      </providers>    
    </sessionState>

添加的模块如下

<system.webServer>
    <modules>
      <remove name="Session" />
      <add name="Session" type="Microsoft.AspNet.SessionState.SessionStateModuleAsync, Microsoft.AspNet.SessionState.SessionStateModule, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode" />
    </modules>
  </system.webServer>

我希望将会话值存储在Azure缓存中以供Redis使用。但是在IIS上托管后无法正常工作。

2 个答案:

答案 0 :(得分:0)

对于任何路过的人来说,可能会有相同的问题,并且对于他们来说,添加Session标签不起作用,则您的应用程序池可能配置为“经典”

this post看来, Microsoft.AspNet.SessionState.SessionStateModuleAsync 不支持经典应用程序池

您需要像这样将其切换为“集成”:

enter image description here

Microsoft official application pools documentation

答案 1 :(得分:0)

您可以在app.config / web.config下尝试

<modules>
<remove name="Session" />
<add name="Session" type="Microsoft.AspNet.SessionState.SessionStateModuleAsync,Microsoft.AspNet.SessionState.SessionStateModule, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode" />

如果这还不能正常工作,请选择使用非SSL端口,看看是否可行。