【问题标题】:Asp.net Load Balancing Server ErrorAsp.net 负载平衡服务器错误
【发布时间】:2017-10-31 04:21:22
【问题描述】:

当我在两台 Azure 负载平衡服务器上的 asp.net 应用程序上收到空引用错误。当我关闭一个错误消失。在查看调用堆栈时,没有真正原因引发空引用。我什至在两台服务器上都设置了一个远程调试会话,并且没有逻辑原因导致我收到空引用错误。我的直觉说它在一台服务器上运行良好,但在有两台服务器时不行,所以它一定是负载平衡问题,我需要更改我的应用程序设置以包括负载平衡。这是一个正常的迹象,表明应用程序设置需要改变吗?如果是这样,需要改变什么?如果不是,我可以运行哪些其他诊断程序来让我的应用程序在集群上运行?

System.InvalidOperationException: Nullable object must have a value.
   at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   at POS.Domain.Manager.GetCommodityList(Int32 locationID, DateTime delDate, Int32 ogID, VMUserProfile profile) in c:\Workspace\Ordering Portals\DanielBranch\POS.Domain\BLL\Manager.cs:line 1123
   at POS.UI.Controllers.OrderingController.GetCommodityList(Int32 locationID, String delDate, VMUserProfile userprofile) in c:\Workspace\Ordering Portals\DanielBranch\POS.UI\Controllers\OrderingController.cs:line 733
   at lambda_method(Closure , ControllerBase , Object[] )
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<>c__DisplayClass2b.<BeginInvokeAction>b__1c()
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)
   at System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

【问题讨论】:

  • “当查看调用堆栈时,并没有真正的原因导致空引用被抛出” - 也许将它包含在问题中?
  • 添加了堆栈跟踪和堆栈跟踪在代码中指向的位置的屏幕截图

标签: c# asp.net azure load-balancing


【解决方案1】:

您的网站似乎是有状态的,这意味着您将信息存储在一台服务器上,因此如果将用户发送到另一台服务器,则该信息将不存在。例如,如果您使用的是进程内会话,它们将只存在于该一台服务器上。

幸运的是,Azure 应用服务中有一项功能允许每次将用户发送回同一台服务器。

只需在应用程序设置下开启ARR Affinity设置。这将确保用户在每次请求时都被发送回同一服务器。

Source

【讨论】:

  • 如果它在 Azure 的虚拟机上运行怎么办?
  • 负载平衡如何?应用网关、负载均衡器、流量管理器?
  • 它是使用 Azure 负载均衡器的 VM
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多