যখন কোনও ব্যবহারকারী কোনও পৃষ্ঠা লোড করেন, তখন এটি এক বা একাধিক অ্যাজাক্স অনুরোধ করে, যা এএসপি.নেট ওয়েব এপিআই 2 নিয়ন্ত্রণকারীগুলিকে আঘাত করে। যদি ব্যবহারকারী এই পৃষ্ঠায় অজাক্স অনুরোধগুলি সম্পূর্ণ করার আগে অন্য পৃষ্ঠায় নেভিগেট করে, তবে অনুরোধগুলি ব্রাউজার দ্বারা বাতিল করা হয়। আমাদের ELMAH HTTPModule এর পরে প্রতিটি বাতিল হওয়া অনুরোধের জন্য দুটি ত্রুটি লগ করে:
ত্রুটি 1:
System.Threading.Tasks.TaskCanceledException: A task was canceled.
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.<ExecuteAuthorizationFilterAsyncCore>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__0.MoveNext()
ত্রুটি 2:
System.OperationCanceledException: The operation was canceled.
at System.Threading.CancellationToken.ThrowIfCancellationRequested()
at System.Web.Http.WebHost.HttpControllerHandler.<WriteBufferedResponseContentAsync>d__1b.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.WebHost.HttpControllerHandler.<CopyResponseAsync>d__7.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.WebHost.HttpControllerHandler.<ProcessRequestAsyncCore>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.TaskAsyncHelper.EndTask(IAsyncResult ar)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
স্ট্যাকট্রেসটি দেখে, আমি দেখতে পাচ্ছি যে ব্যতিক্রমটি এখান থেকে ছুঁড়ে ফেলা হচ্ছে: https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Http.WebHost/HttpControllerHandler.cs# L413
আমার প্রশ্ন: আমি কীভাবে এই ব্যতিক্রমগুলি পরিচালনা এবং উপেক্ষা করতে পারি?
এটি ব্যবহারকারীর কোডের বাইরের বলে মনে হচ্ছে ...
মন্তব্য:
- আমি এএসপি.নেট ওয়েব এপিআই 2 ব্যবহার করছি
- ওয়েব API এন্ডপয়েন্টগুলি হ'ল অ্যাসিঙ্ক এবং অ-অ্যাসিঙ্ক পদ্ধতির মিশ্রণ।
- আমি ত্রুটি লগিং যেখানেই যুক্ত করি না কেন, আমি ব্যবহারকারীর কোডে ব্যতিক্রমটি ধরতে অক্ষম
- Global.asax
Applicaiton_Error
TaskScheduler.UnobservedTaskException
- ELMAH ত্রুটি ফিল্টারিং
void ErrorLog_Filtering
( https://code.google.com/p/elmah/wiki/ErrorFiltering )
- Global.asax