mongodb asp.net会话提供程序:如何在web.config中设置应用程序名称

mongodb asp.net会话提供程序:如何在web.config中设置应用程序名称,asp.net,.net,session,mongodb,web-config,Asp.net,.net,Session,Mongodb,Web Config,问题: 我有一个自定义MongoDB会话提供程序。 它在web.config中的配置如下 <sessionState cookieless="false" timeout="20" regenerateExpiredSessionId="true" mode="Custom" customProvider="MongoSessionStoreProvider"> <providers> <add name="MongoSessionSto

问题:

我有一个自定义MongoDB会话提供程序。 它在web.config中的配置如下

<sessionState cookieless="false" timeout="20" regenerateExpiredSessionId="true" mode="Custom" customProvider="MongoSessionStoreProvider">
      <providers>
        <add name="MongoSessionStoreProvider" type="MongoSessionStore.MongoSessionStoreProvider" writeExceptionsToEventLog="true"/>
      </providers>
</sessionState>

但它抛出了一个异常,因为应用程序名为“/”
如何设置应用程序名称?
我不会定义任何成员资格提供者,也不会很快定义任何成员资格提供者。

查看应用程序名属性似乎可以:

<add name="MongoSessionStoreProvider" applicationName="myapplicationname"
    type="MongoSessionStore.MongoSessionStoreProvider" 
    writeExceptionsToEventLog="true"/>

您忘记了不仅指定应用程序名称,还指定了到mongodb的连接字符串。完整配置应如下所示:

 <sessionState cookieless="false" timeout="20" regenerateExpiredSessionId="true"
                 mode="Custom" customProvider="MongoSessionStoreProvider">
     <providers>
       <add name="MongoSessionStoreProvider"
            connectionString="mongodb://admin(admin):1@localhost:27020/" 
            applicationName="ApplicationName"
            type="MongoSessionStore.MongoSessionStoreProvider" 
            writeExceptionsToEventLog="false" />
      </providers>
    </sessionState>

一些注意事项:

  • 应用程序名称将是mongodb中集合的名称。(数据库名称为
    AspSessionStage
  • 如果您的mongodb安装没有
    --auth
    ,您可以从连接字符串
    admin(admin):1@
    中取出auth信息
  • 此提供程序未清除过期会话(需要运行一些后台作业才能清除)
  • 你可以直接向我报告你可能发现的任何错误

  • 不,我以前试过,没有。我还将变量applicationName替换为一个属性,其中set不执行任何操作,get返回“myapplication”,但这也不起作用。有什么东西一直在覆盖应用程序名。@困惑-有mongo配置文件吗?它比这个好得多。如果仔细查看它,您会发现它在MongoSessionStoreProvider.cs文件的Initialize中的变量config中获取提供者配置信息。但它从不设置应用程序名,所以它是虚拟路径,即“/”,这是重写我的设置的原因。。。我想知道这为什么会奏效…@Quandary:application name在数据库中用作集合名,provider在第71行使用config中的applicationName(以及连接字符串)初始化会话存储。@Andrew Orsich:Yep,已经看到了。但是,我必须更正实际执行此操作的代码。正确,我已经硬编码了connectionstring,因为我必须更新很多内容,并且不想处理可能错误的connectionstring。@Quandary:我不确定你想说什么。什么不适合你?只是应用程序名。会话提供程序将信息存储在db[StrapApplicationName]中,如果StrapApplicationName为=“/”,则会引发异常。我必须修改会话提供程序源代码以实际读取applicationName属性。在那之后,它工作得很好。