错误:安全手柄已关闭(NServiceBus/NancyFX)
我已经调试了几天,试图找到根本原因,它似乎是由发送两条消息引起的错误:安全手柄已关闭(NServiceBus/NancyFX),nservicebus,windows-authentication,nancy,Nservicebus,Windows Authentication,Nancy,我已经调试了几天,试图找到根本原因,它似乎是由发送两条消息引起的 public class HomeModule : NancyModule { public HomeModule(IBus bus) { Get["/"] = _ => { bus.Send<Command1>(m => { m.Id = "WHATEVER"; }); return "OK";
public class HomeModule : NancyModule
{
public HomeModule(IBus bus)
{
Get["/"] = _ =>
{
bus.Send<Command1>(m => { m.Id = "WHATEVER"; });
return "OK";
};
}
}
public class Command1 : ICommand
{
public string Id { get; set; }
}
public class Command2 : ICommand
{
public string Id { get; set; }
}
public class Handler1 : IHandleMessages<Command1>
{
public IBus Bus { get; set; }
public void Handle(Command1 message)
{
Bus.Send<Command2>(m => { m.Id = message.Id; });
}
}
public class Handler2 : IHandleMessages<Command2>
{
public IBus Bus { get; set; }
public void Handle(Command2 message)
{
}
}
public class Bootstrapper : DefaultNancyBootstrapper
{
protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
LogManager.Use<DefaultFactory>().Directory(container.Resolve<IRootPathProvider>().GetRootPath());
var configuration = new BusConfiguration();
configuration.EndpointName("MyEndpoint");
configuration.DisableFeature<NServiceBus.Features.SecondLevelRetries>(); // TODO
if (Debugger.IsAttached) configuration.EnableInstallers();
configuration.UsePersistence<InMemoryPersistence>();
var bus = Bus.Create(configuration).Start();
container.Register<IBus>(bus);
}
}
公共类HomeModule:NancyModule
{
公共家庭模块(IBus总线)
{
获取[“/”]=\u=>
{
发送(m=>{m.Id=“WHATEVER”;});
返回“OK”;
};
}
}
公共类命令1:ICommand
{
公共字符串Id{get;set;}
}
公共类命令2:ICommand
{
公共字符串Id{get;set;}
}
公共类Handler1:IHandleMessages
{
公共IBus总线{get;set;}
公共无效句柄(Command1消息)
{
发送(m=>{m.Id=message.Id;});
}
}
公共类Handler2:IHandleMessages
{
公共IBus总线{get;set;}
公共无效句柄(Command2消息)
{
}
}
公共类引导程序:DefaultNancyBootstrapper
{
受保护的覆盖无效应用程序启动(Nancy.TinyIoc.TinyIoCContainer容器、Nancy.Bootstrapper.IPipelines管道)
{
基础应用程序启动(容器、管道);
LogManager.Use().Directory(container.Resolve().GetRootPath());
var配置=新总线配置();
configuration.EndpointName(“MyEndpoint”);
configuration.DisableFeature();//TODO
if(Debugger.IsAttached)configuration.EnableInstallers();
configuration.UsePersistence();
var bus=bus.Create(configuration).Start();
集装箱登记册(公共汽车);
}
}
给我一个错误:
键值勘误表a539e440-0b7a-4283-a20a-a472006da636\0
NServiceBus.ContentType文本/xml
N服务总线.会话ID 2b38fa53-749b-43e4-aa0f-a472006da63a
N服务总线相关ID a539e440-0b7a-4283-a20a-a472006da636
NServiceBus.EnclosedMessageTypes命令1,版本=1.0.0.0,
区域性=中性,PublicKeyToken=空
NServiceBus.ExceptionInfo.ExceptionType System.ObjectDisposedException
NServiceBus.ExceptionInfo.HelpLinkNServiceBus.ExceptionInfo.Message安全句柄已关闭 NServiceBus.ExceptionInfo.Source mscorlib NServiceBus.ExceptionInfo.StackTrace System.ObjectDisposedException: 安全手柄已关闭 System.Runtime.InteropServices.SafeHandle.DangerousAddRef(布尔值& 成功)在 系统.StubHelpers.StubHelpers.SafeHandledRef(安全手柄幻影, 布尔值(布尔值与成功值) Microsoft.Win32.Win32 Native.GetTokenInformation(安全令牌句柄 令牌句柄,UInt32令牌信息类,SafeLocalAllocHandle 令牌信息、UInt32令牌信息长度、UInt32和返回长度) 在 System.Security.Principal.WindowsIdentity.GetTokenInformation(SafeTokenHandle tokenHandle,TokenInformationClass(TokenInformationClass)位于 System.Security.Principal.WindowsIdentity.get_User()位于 System.Security.Principal.WindowsIdentity.GetName()位于 System.Security.Principal.WindowsIdentity.get_Name()位于 NServiceBus.Impersonation.Windows.WindowsIdentityEnricher.MutateOutgoing(逻辑消息 中的逻辑消息、传输消息(TransportMessage) c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Impersonation\Windows\windowsdidentityenricher.cs:line 16在 NServiceBus.MutateOutgoingPhysicalMessageBehavior.Invoke(OutgoingContext 上下文,下一步行动)在 c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\MessageMutator\mutateoutgoingpoingphysicalmessagebehavior.cs:line 12在NServiceBus.BehaviorChain
1.InvokeNext(T上下文)中
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line
107 at
NServiceBus.BehaviorChain
1.c\u显示类5.b\u中的2()
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line
94在NServiceBus.SerializeMessagesBehavior.Invoke处(OutgoingContext
上下文,下一步行动)在
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Unicast\Behaviors\SerializeMessagesBehavior.cs:line
38在NServiceBus.BehaviorChain1.InvokeNext(T上下文)中
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line
107 at
NServiceBus.BehaviorChain
1.c\u显示类5.b\u中的2()
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line
94 at
NServiceBus.CreatePhysicalMessageBehavior.Invoke(OutgoingContext
上下文,下一步行动)在
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Unicast\Behaviors\CreatePhysicalMessageBehavior.cs:line
58在NServiceBus.BehaviorChain1.InvokeNext(T上下文)中
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line
107 at
NServiceBus.BehaviorChain
1.c\u显示类5.b\u中的2()
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line
94 at
NServiceBus.PopulateAutoCorrelationHeadersForRepliesBehavior.Invoke(OutgoingContext
上下文,下一步行动)在
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Sagas\PopulateAutoCorrelationHeadersForRepliesBehavior.cs:line
46在NServiceBus.BehaviorChain1.InvokeNext(T上下文)中
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line
107 at
NServiceBus.BehaviorChain
1.c\u显示类5.b\u中的2()
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line
94 at
NServiceBus.MutateOutgoingMessageBehavior.Invoke(OutgoingContext
上下文,下一步行动)在
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\MessageMutator\MutateOutgoingMessageBehavior.cs:line
28在NServiceBus.BehaviorChain1.InvokeNext(T上下文)中
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line
107 at
NServiceBus.BehaviorChain
1.c\u显示类5.b\u中的2()
c:\BuildAgent\work\3206e2123f54fce4\src\NServiceBus.Core\Pipeline\BehaviorChain.cs:line
94位于NServiceBus.SendValidatorBehavior.Invoke
public class PrincipalEnricher : IMutateOutgoingTransportMessages
{
public void MutateOutgoing(LogicalMessage logicalMessage, TransportMessage transportMessage)
{
Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
}
}