我在我们的解决方案中使用NServiceBus v4.3,MVC4,RavenDB 2.5和StructureMap 2.6.4.
我在StructureMap下遇到类似问题的问题,在这个问题的回答中我要求MVC控制器使用不同的生命周期,NServiceBus Handler在我的Web项目中使用RavenDB的IDocumentSession.
特别是在我的情况下,如果我使用HybridHttpOrThreadLocalScoped(如上面的答案建议Windsor)生命周期,会话没有被妥善处理,我很快就达到了30个事务限制错误.如果我使用HttpContext生命周期,则不会调用Web项目中的NSB事件处理程序.
在我的控制器中,会话被包含在通过MVC ActionFilter应用的工作单元中.我也使用处理程序中的UoW,因为我的注册表已连线以从UoW检索会话.代码是这样的:
RavenDbWebRegistry.cs
public sealed class RavenDbWebRegistry : Registry
{
public RavenDbWebRegistry()
{
// register RavenDB document store
ForSingletonOf<IDocumentStore>().Use(() =>
{
var documentStore = new DocumentStore
{
ConnectionStringName = "RavenDB",
Conventions =
{
IdentityPartsSeparator = "-",
JsonContractResolver = new PrivatePropertySetterResolver(),
},
};
documentStore.Initialize();
return documentStore;
});
For<IDocumentSession>().HybridHttpOrThreadLocalScoped().Add(ctx =>
{
var uow = (IRavenDbUnitOfWork)ctx.GetInstance<IUnitOfWork>();
return uow.DocumentSession;
});
For<IUnitOfWork>().HybridHttpOrThreadLocalScoped().Use<WebRavenDbUnitOfWork>();
}
}
Run Code Online (Sandbox Code Playgroud)
Web项目处理程序示例:
public class SiteCreatedEventHandler : IHandleMessages<ISiteCreatedEvent>
{
public IBus Bus …Run Code Online (Sandbox Code Playgroud) 我有一个TeamCity服务器设置为构建多个解决方案,然后使用NUnit Test Runner在其中运行单元测试.
这已经好几个月了; 但是,使用我们的最新版本,我遇到以下错误:
SetUp方法失败.SetUp:System.IO.FileLoadException:无法加载文件或程序集'log4net,Version = 1.2.13.0,Culture = neutral,PublicKeyToken = 669e0ddf0bb1aa2a'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)
它只发生在整个系统中包含数百个测试的单个TestFixture中.使用ReSharper或NUnit GUI运行时,测试全部通过.
Nuget包在被测试的项目和测试项目本身中都被正确引用.由于只安装了一个版本的Log4Net,因此不需要运行时程序集绑定重定向.
是否有其他人有类似的问题,他们已经解决或任何想法可能是什么问题?为什么它在本地工作而不在服务器上工作,特别是考虑到先前传递的相同测试.
我本地计算机和TeamCity服务器上的NUnit版本是相同的.