我正在维护的webforms项目上获得NullReferenceExceptions。问题是这个异常没有堆栈跟踪,因为我的代码都没有导致异常。
复制到剪贴板的异常详细信息提供零帮助:
System.NullReferenceException was unhandled
Message: An unhandled exception of type 'System.NullReferenceException' occurred in mscorlib.dll
Additional information: Object reference not set to an instance of an object.
当我查看非用户代码堆栈跟踪时,我看到以下内容(全部在mscorlib中):
错误通过加载页面或回发随机且不一致地发生。在我添加System.Net.Http.HttpClient
以从其他站点上公开的REST服务中提取数据后,问题就开始了。请注意,HttpClient仅包含用于发送/接收数据的异步方法。基于内部堆栈跟踪,我高度怀疑任务<> / async / await作为罪魁祸首。
为了帮助进行故障排除,请允许我重申我在.NET 4.6中编译的WebForms站点中运行它(如果您要告诉我我的问题是我需要升级到MVC,请保存您的按键并且不要说它。虽然HttpClient将所有内容公开为Task<>,但我通过调用来同步调用它们:
Task<MyObject> myResultTask = restClient.GetResultAsync();
MyObject myResult = myResultTask.Result; // no await
提前致谢!
答案 0 :(得分:3)
我刚刚遇到这个问题,并希望将此作为答案。
在您的web.config中,请确保您拥有以下内容:
<system.Web>
<httpRuntime targetFramework="4.5" />
</system.Web>
和
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
在此处查看更多信息:
https://blogs.msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/
如果你不这样做,它似乎只会随机崩溃。我是后向兼容性的忠实粉丝,但如果你不选择以新的方式崩溃,我就不会崩溃。
(Stephen Cleary的评论建议)