asp.net – 带有OWIN的Web API会为HttpMessageInvoker抛出Object
发布时间:2020-12-16 04:32:17 所属栏目:asp.Net 来源:网络整理
导读:我在ASP.NET WebApi2设置中遇到了一些OWIN的困难.重启后的第一个请求导致异常: [ObjectDisposedException: Cannot access a disposed object. Object name: 'System.Net.Http.HttpMessageInvoker'.] System.Net.Http.HttpMessageInvoker.CheckDisposed() +3
我在ASP.NET WebApi2设置中遇到了一些OWIN的困难.重启后的第一个请求导致异常:
[ObjectDisposedException: Cannot access a disposed object. Object name: 'System.Net.Http.HttpMessageInvoker'.] System.Net.Http.HttpMessageInvoker.CheckDisposed() +327456 System.Net.Http.HttpMessageInvoker.SendAsync(HttpRequestMessage request,CancellationToken cancellationToken) +24 System.Web.Http.Owin.<InvokeCore>d__0.MoveNext() +501 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +99 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.<RunApp>d__5.MoveNext() +187 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +99 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.<DoFinalWork>d__2.MoveNext() +185 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.StageAsyncResult.End(IAsyncResult ar) +69 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.EndFinalWork(IAsyncResult ar) +64 System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +483 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously) +157 我认为问题是由于第一次点击EF DbContext时长时间运行的任务造成的.总而言之,第一个请求大约是4-6000毫秒.在第一次请求之后,没有更多例外. 我已经使用webapi项目和以下OWIN启动(并且没有global.asax)以简化形式重现了该问题: public class Startup { public void Configuration(IAppBuilder app) { var config = new HttpConfiguration(); config.MapHttpAttributeRoutes(); // ---- simulate long running initialization code ------- Thread.Sleep(3000); // ------------------------------------------------------ app.UseWebApi(config); } } 我添加一个控制器: [Route("api/test/number")] public class TestController : ApiController { public object Get() { return 42; } } 当我请求这个时,第一个请求导致异常. 解决方法
这是一个老问题,但是花了好几个小时试图击败ObjectDisposedException并找到了一个解决方案,这个
AspNetWebStack issue on codeplex帮助了我:
当您的owin web api应该在自托管环境中运行时,您可以在owin启动类中绑定web api配置 public void Configuration(IAppBuilder app) { ConfigureOAuth(app); HttpConfiguration config = new HttpConfiguration(); WebApiConfig.Register(config); app.UseWebApi(config); } 如果您打算使用IIS作为您的owin web api的主机,那么将web api配置绑定到全局asax类中 protected void Application_Start(object sender,EventArgs e) { GlobalConfiguration.Configure(WebApiConfig.Register); } 这消除了ObjectDisposedException,我的web api像魅力一样运行 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET Core 2.0 in Docker on Wind
- asp.net – 如何使用数据库实现同步Memcached
- asp.net-mvc – MVC发布复杂对象的列表
- asp.net的ftp的上传和下载
- 问题在ASP.NET 5(Core)中添加对类库项目的引用
- kendo-ui – Kendo DataSource如何在使用DataTable时定义Mo
- asp.net – 如何让gridview中的一列成为图像?
- asp.net – 在自动生成的GridView列中防止HTML编码
- ASP.NET WebAPI如何使用IIS存储我的用户身份验证状态?
- wcf – 如何使用Fiddler收听asp.net开发服务器(即cassini)?
推荐文章
站长推荐
- asp.net-mvc – 使用自己的HtmlHelper扩展名用于
- asp.net – 编辑不适用于Html.DropDownList和@cl
- asp.net-mvc – 如何将整个ViewModel传递回控制器
- .NET内存泄漏
- Asp.net Core 1.1 升级后操作mysql出错的解决办法
- asp.net下将图片保存到XML文件的方法
- asp.net – ADO.NET TableAdapter参数
- asp.net-mvc – 我想拿最后4条记录,但总是得到前
- asp.net-mvc-3 – Telerik().ScriptRegistrar()如
- asp.net-mvc-3 – Microsoft AntiXSS替代
热点阅读