客户端断开连接时Asp.net Web API自助主机服务未处理的异常
我在一个windows服务中使用WebAPIself-host,我遇到了一个问题,在谷歌搜索了几个小时后还没有找到合理的答案 其中一个api控制器提供大量数据流(实际上没有那么大,几十MB)。生成数据需要一些时间,因此我决定使用TransferMode.streamdResponse来最小化客户端等待响应的时间。我还添加了一个客户端断开连接时Asp.net Web API自助主机服务未处理的异常,asp.net,wcf,asp.net-web-api,wcf-web-api,Asp.net,Wcf,Asp.net Web Api,Wcf Web Api,我在一个windows服务中使用WebAPIself-host,我遇到了一个问题,在谷歌搜索了几个小时后还没有找到合理的答案 其中一个api控制器提供大量数据流(实际上没有那么大,几十MB)。生成数据需要一些时间,因此我决定使用TransferMode.streamdResponse来最小化客户端等待响应的时间。我还添加了一个CompressHandler和自定义CompressedContent(源自HttpContent),主要基于以下内容 控制器返回IDataReader的实例,然后由自定
CompressHandler
和自定义CompressedContent
(源自HttpContent
),主要基于以下内容
控制器返回IDataReader
的实例,然后由自定义格式化程序序列化,最后在我提到的CompressedContent
中进行压缩。整个数据传输是流传输的,因此当客户端接收数据时,服务器端的数据读取器可能仍在从数据库中读取行。当客户表现良好时,一切正常
当客户机在数据仍被序列化到底层网络流时断开连接时,就会出现此问题。我已尝试监视中的IsFaulted
任务,并通过委托(在链接中的CompressedContent
中)处理底层网络流
。不幸的是,当控件离开我的代码时,通信异常
(指定的网络名称不再可用)仍在抛出。从stacktrace可以看出,当Web Api试图关闭(结束)底层网络流(http通道?)时,会引发异常。由于发生了未被观察到的异常,它导致整个windows服务关闭
我通过设置windows服务恢复选项缓解了这个问题,但我想知道是否可以在代码中处理此故障
是否有办法在web api自托管服务模式内设置自定义错误处理程序(IErrorHandler
我使用的是Beta版本,我将尝试在RC上重现此错误,但我怀疑设置此类错误处理程序是否会以任何方式改变,因为我们遇到了相同的问题。我向微软提交了一个修复程序,他们又发布了一个夜间版本来修复这个问题。他们正在考虑将补丁向后移植到RTM。您可以在这里看到拉释放:我与RC有完全相同的问题。你有没有想过?