【发布时间】:2015-01-09 04:50:10
【问题描述】:
我试图在一个 Web 应用程序中合并使用多种技术。 大多数 Rx 代码已经在测试项目中进行了测试,一切似乎都正常工作。但是当我尝试使其在应用程序环境(IIS)中工作时遇到一些例外情况:
Object reference not set to an instance of an object.
at System.Web.ThreadContext.AssociateWithCurrentThread(Boolean setImpersonationContext)
at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext)
at System.Web.LegacyAspNetSynchronizationContext.CallCallbackPossiblyUnderLock(SendOrPostCallback callback, Object state)
at System.Web.LegacyAspNetSynchronizationContext.CallCallback(SendOrPostCallback callback, Object state)
at System.Web.LegacyAspNetSynchronizationContext.Post(SendOrPostCallback callback, Object state)
at System.Reactive.Concurrency.SynchronizationContextExtensions.PostWithStartComplete(SynchronizationContext context, Action action)
at System.Reactive.Concurrency.SynchronizationContextScheduler.Schedule[TState](TState state, Func`3 action)
at System.Reactive.Concurrency.Scheduler.Schedule(IScheduler scheduler, Action action)
at System.Reactive.Linq.ObservableImpl.EventProducer`2.Session.<>c__DisplayClass3.<Connect>b__2()
at System.Reactive.Disposables.AnonymousDisposable.Dispose()
at System.Reactive.Disposables.SingleAssignmentDisposable.Dispose()
at System.Reactive.Disposables.CompositeDisposable.Dispose()
at System.Reactive.Disposables.SingleAssignmentDisposable.Dispose()
at System.Reactive.Sink`1.Dispose()
at System.Reactive.Disposables.SingleAssignmentDisposable.Dispose()
at System.Reactive.Disposables.CompositeDisposable.Dispose()
at System.Reactive.Disposables.SingleAssignmentDisposable.Dispose()
at System.Reactive.ObserveOnObserver`1.Dispose(Boolean disposing)
at System.Reactive.ObserverBase`1.Dispose()
at System.Reactive.Disposables.SingleAssignmentDisposable.Dispose()
at System.Reactive.Disposables.CompositeDisposable.Dispose()
at System.Reactive.Disposables.CompositeDisposable.Dispose()
at System.Reactive.Disposables.RefCountDisposable.Dispose()
at System.Reactive.Disposables.SingleAssignmentDisposable.Dispose()
at System.Reactive.Sink`1.Dispose()
at System.Reactive.Disposables.SingleAssignmentDisposable.Dispose()
at System.Reactive.Disposables.CompositeDisposable.Dispose()
at System.Reactive.Disposables.SingleAssignmentDisposable.Dispose()
at System.Reactive.ObserveOnObserver`1.Dispose(Boolean disposing)
at System.Reactive.ObserverBase`1.Dispose()
at System.Reactive.Disposables.SingleAssignmentDisposable.Dispose()
at System.Reactive.Disposables.CompositeDisposable.Dispose()
at System.Reactive.Disposables.SingleAssignmentDisposable.Dispose()
at System.Reactive.Disposables.CompositeDisposable.Dispose()
at System.Reactive.Disposables.SingleAssignmentDisposable.Dispose()
at System.Reactive.Sink`1.Dispose()
at System.Reactive.Linq.ObservableImpl.SelectMany`2._.Iter.OnError(Exception error)
at System.Reactive.ScheduledObserver`1.Run(Object state, Action`1 recurse)
at System.Reactive.Concurrency.Scheduler.<>c__DisplayClass10`1.<InvokeRec1>b__d(TState state1)
at System.Reactive.Concurrency.Scheduler.InvokeRec1[TState](IScheduler scheduler, Pair`2 pair)
at System.Reactive.Concurrency.ScheduledItem`2.InvokeCore()
at System.Reactive.Concurrency.ScheduledItem`1.Invoke()
at System.Reactive.Concurrency.EventLoopScheduler.Run()
at System.Threading.ThreadHelper.ThreadStart_Context(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.Threading.ThreadHelper.ThreadStart()
我怀疑:“It's All About the SynchronizationContext”或 Rx Scheduler,有人可以提供更多信息或详细信息...目前,我找不到原因或如何解决这些问题,因为所有例外是内部的(来自 .NET 库或 Rx 库)。
编辑 1:
经过一些研究,我发现了其他相关的主题,但没有答案。
- Async logging throwing a NullReferenceException
- NullReferenceException in System.Threading.Tasks calling HttpClient.GetAsync(url)
-http://connect.microsoft.com/VisualStudio/feedback/details/745956/getting-null-reference-exception-in-asp-net-mvc-4-rc#
编辑 2: 花了几个小时在示例应用程序中得到这个错误(难以置信地在我的测试网络应用程序中正常工作)后,这里是引发错误的代码(此代码只是示例)。
https://github.com/jlVidal/WebForms-Signalr-And-Rx-Error
模拟,请与界面交互,订阅,取消订阅,断开连接,重新连接..点击订阅某个ID,关闭页面时总是报错(它调用OnDisconnected方法)并抛出@987654329 @ 与上面类似的堆栈跟踪。
毕竟..不知道找到原因了,很多观察可能没有意义:
- 我无法在创建集线器时创建和管理我的 Rx 订阅,或者做类似的事情。我这样做是因为延迟加载。事实上,我管理订阅的那一刻 (Subscribe) 会影响整体,如果我移动这段代码,显然似乎停止给出错误。
- 这个错误经常出现在
OnDisconnected(SignalR Hub方法),但是几乎是随机的,我真的没有找到规律。
谁能给我一盏灯?
【问题讨论】:
标签: c# .net .net-4.0 signalr system.reactive