Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
客户端断开连接时Asp.net Web API自助主机服务未处理的异常_Asp.net_Wcf_Asp.net Web Api_Wcf Web Api - Fatal编程技术网

客户端断开连接时Asp.net Web API自助主机服务未处理的异常

客户端断开连接时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的实例,然后由自定

我在一个windows服务中使用WebAPIself-host,我遇到了一个问题,在谷歌搜索了几个小时后还没有找到合理的答案

其中一个api控制器提供大量数据流(实际上没有那么大,几十MB)。生成数据需要一些时间,因此我决定使用TransferMode.streamdResponse来最小化客户端等待响应的时间。我还添加了一个
CompressHandler
和自定义
CompressedContent
(源自
HttpContent
),主要基于以下内容

控制器返回
IDataReader
的实例,然后由自定义格式化程序序列化,最后在我提到的
CompressedContent
中进行压缩。整个数据传输是流传输的,因此当客户端接收数据时,服务器端的数据读取器可能仍在从数据库中读取行。当客户表现良好时,一切正常

当客户机在数据仍被序列化到底层网络流时断开连接时,就会出现此问题。我已尝试监视
中的
IsFaulted
任务,并通过
委托(在链接中的
CompressedContent
中)处理底层网络
。不幸的是,当控件离开我的代码时,
通信异常
(指定的网络名称不再可用)仍在抛出。从stacktrace可以看出,当Web Api试图关闭(结束)底层网络流(http通道?)时,会引发异常。由于发生了未被观察到的异常,它导致整个windows服务关闭

我通过设置windows服务恢复选项缓解了这个问题,但我想知道是否可以在代码中处理此故障

是否有办法在web api自托管服务模式内设置自定义错误处理程序(
IErrorHandler


我使用的是Beta版本,我将尝试在RC上重现此错误,但我怀疑设置此类错误处理程序是否会以任何方式改变,因为我们遇到了相同的问题。我向微软提交了一个修复程序,他们又发布了一个夜间版本来修复这个问题。他们正在考虑将补丁向后移植到RTM。您可以在这里看到拉释放:

我与RC有完全相同的问题。你有没有想过?