当使用AKK.Net作为通信通道时,应用程序偶尔会崩溃
问题描述:
我们使用AKKA.Net来进行多个进程间的通信。当使用AKK.Net作为通信通道时,应用程序偶尔会崩溃
我们使用的AKKA.Net版本是最新版本:1.0.7。 使用AKKE.Net大约有20个进程。这些进程是Windows服务。 进程之间的通信工作量不是很大,10个请求/分钟,并且夜间的工作量为零。 网络不是很稳定。 AKKA.Cluster未在系统中使用。
我们为AppDomain.CurrentDomain.UnhandledException添加一个事件处理程序,以便我们有机会记录一些重要的异常。代码如下:
AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs) =>
{
logger.LogFatal("Unhandled exception captured, Terminating:" + eventArgs.IsTerminating);
};
我们保持thoese进程运行数天,发现一些过程(也许2或3)坠毁。我们检查日志,看起来似乎是AKKA.Net的一个未知例外。例外的详细情况列举如下:
Exception message:Object reference not set to an instance of an object.
Exception stacktrace:
at Helios.Reactor.Tcp.TcpProxyReactor.CloseConnection(Exception ex, IConnection remoteHost)
at Helios.Reactor.Tcp.TcpProxyReactor.ReceiveCallback(IAsyncResult ar)
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Net.ContextAwareResult.CompleteCallback(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.ContextAwareResult.Complete(IntPtr userToken)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
当抛出异常时的工作量几乎为零。
有没有关于如何解决这个问题的任何提示?非常感谢。
明白了。感谢您的回复! 等待你的好消息:) – sevendays
嗨,这个问题有什么进展吗? :) – sevendays
是的 - 但仍有更多的工作要走。您会在发行说明中看到为什么。您也可以在@aaronontheweb上通过Akka.NET Gitter聊天或在Twitter上ping我。 – Aaronontheweb