我正在评估JOliver的EventStore库.特别是,我试图使用RavenDB作为EventStore的持久性引擎.EventStore附带了一个插件.注意:数据库为空,没有索引(默认值除外).
在连接商店时,我使用了以下内容:
var store = Wireup.Init()
.UsingRavenPersistence("EventStore", new DocumentObjectSerializer())
.Build();
Run Code Online (Sandbox Code Playgroud)
但是,当我运行我的程序时,我得到一个异常,表明找不到"RavenCommitByRevisionRange"索引.
在挖掘EventStore代码时,我认为问题恰好是RavenPersistenceEngine没有被初始化.初始化代码在RavenDB服务器中安装所需的索引.
在SQL服务器方面,我注意到示例项目中的接线代码显示了对名为"InitializeStorageEngine"的扩展方法的调用.此扩展方法与"PersistenceWireup"类绑定.但是,我用来连接RavenDB持久性的扩展方法返回类"Wireup".所以我将部分线程代码包装在一个新的PersistenceWireup实例中,并且能够像这样调用".InitializeStorageEngine()":
var store = new PersistenceWireup(
Wireup.Init()
.UsingRavenPersistence("EventStore", new DocumentObjectSerializer()))
.InitializeStorageEngine()
.Build();
Run Code Online (Sandbox Code Playgroud)
这很棒!RavenDB数据库现在包含必要的索引.
所以...我的问题:不应该".UsingRavenPersistence(...)"返回"PersistenceWireup"的实例而不是简单的"Wireup"?或者是否有更好的方法在EventStore中连接RavenDB持久性?
我想我可能已经发现ASP.NET MVC的问题和它的事件管道.特别是,我发现Session_Start被多次调用,每个都包含一个新的SessionID.
这是一步一步的过程:
添加以下方法(是的它是空的):
protected void Session_Start(){}
在方法中设置断点
我在标准的ASP.NET Web应用程序(而不是MVC)上尝试了同样的事情,而Session_Start只触发了一次.
我很确定我在这里做错了,因为我正在使用默认的项目模板,并且唯一被修改的代码是Global.asax.cs文件,以添加Session_Start方法.
我正在使用IIS Express,但我使用"Cassini"Web服务器(Visual Studio Development Server)重复了上述步骤,结果相同.
有什么建议?
我决定在调试会话期间使用Fiddler检查HTTP流量.看起来:
我记下了生成的三个SessionID中的每一个,并且看起来浏览器所持有的是第一个.因此,当我们进入上面的第6步,并且一切似乎都有效时,它实际上使用了生成的第一个SessionID.
所以......我决定主持一个"favicon.ico"文件.我将ico文件放在项目的根目录中,然后再次启动我的调试会话.这次,Session_Start只触发一次."/favicon.ico"成功送达(200).
所以...我猜它在某种意义上的工作方式应该......但为什么调用"/favicon.ico"会触发Session_Start事件???? 我不应该选择不托管图标吗?
ASIDE:我在ASP.NET(而不是mvc)项目中尝试了以上所有内容,并且它没有相同的问题,即使没有由默认的"ASP.NET Web应用程序"项目托管的favicon.ico文件.