小编Lee*_*app的帖子

使用RavenDB Persistence Plugin连接JOliver的EventStore

我正在评估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持久性?

.net c# cqrs ravendb event-sourcing

5
推荐指数
1
解决办法
2191
查看次数

Session_Start在默认的ASP.NET MVC3项目上多次触发

我想我可能已经发现ASP.NET MVC的问题和它的事件管道.特别是,我发现Session_Start被多次调用,每个都包含一个新的SessionID.

这是一步一步的过程:

  1. 打开VS2010
  2. 档案| 新项目
  3. ASP.NET MVC 3 Web应用程序,接受默认名称,单击"确定"
  4. 选择Internet应用程序(虽然我认为它不重要),单击"确定"
  5. 完成创建后,编辑Global.asax.cs文件
  6. 添加以下方法(是的它是空的):

    protected void Session_Start(){}

  7. 在方法中设置断点

  8. 调试
  9. 请注意,在显示页面之前会捕获断点两次.如果在捕获断点时观察"Session.SessionID",您将看到每次会话ID都是新的.
  10. 进入主页后,单击"主页"或"关于"选项卡链接.
  11. Session_Start将再次触发,这次使用新的SessionID.
  12. 继续执行,任何后续操作都将不再触发Session_Start.

我在标准的ASP.NET Web应用程序(而不是MVC)上尝试了同样的事情,而Session_Start只触发了一次.

我很确定我在这里做错了,因为我正在使用默认的项目模板,并且唯一被修改的代码是Global.asax.cs文件,以添加Session_Start方法.

我正在使用IIS Express,但我使用"Cassini"Web服务器(Visual Studio Development Server)重复了上述步骤,结果相同.

有什么建议?

UPDATE

我决定在调试会话期间使用Fiddler检查HTTP流量.看起来:

  1. 当我请求"/"URL时,会触发第一个Session_Start.这看似合理.然后,在此时生成的SessionID将写入对浏览器的响应中.再次,似乎是合理的.
  2. 然后,Fiddler显示*.js和*.css文件的请求/响应.所有成功.这些都没有触发Session_Start.目前很好.
  3. 然后Fiddler显示已经为"/favicon.ico"发出了请求.此时,Session_Start触发,并生成一个新的SessionID ...我继续.
  4. 在Fiddler上,它显示未找到"/favicon.ico"文件(404).显示网页.我点击"主页"链接.
  5. 在Fiddler中请求URL"/"并且响应正常.但是,请求另一个"/favicon.ico"文件,并再次使用新的SessionID触发Session_Start ...我继续.
  6. 所有后续请求都有响应,浏览器停止询问"/favicon.ico".

我记下了生成的三个SessionID中的每一个,并且看起来浏览器所持有的是第一个.因此,当我们进入上面的第6步,并且一切似乎都有效时,它实际上使用了生成的第一个SessionID.

所以......我决定主持一个"favicon.ico"文件.我将ico文件放在项目的根目录中,然后再次启动我的调试会话.这次,Session_Start只触发一次."/favicon.ico"成功送达(200).

所以...我猜它在某种意义上的工作方式应该......但为什么调用"/favicon.ico"会触发Session_Start事件???? 我不应该选择不托管图标吗?

ASIDE:我在ASP.NET(而不是mvc)项目中尝试了以上所有内容,并且它没有相同的问题,即使没有由默认的"ASP.NET Web应用程序"项目托管的favicon.ico文件.

asp.net asp.net-mvc asp.net-mvc-3

5
推荐指数
2
解决办法
8826
查看次数

标签 统计

.net ×1

asp.net ×1

asp.net-mvc ×1

asp.net-mvc-3 ×1

c# ×1

cqrs ×1

event-sourcing ×1

ravendb ×1