C# 远程主机关闭了连接。错误代码为0x800704CD。Firefox制造了一个问题 使用(Stream=\u client.GetDownloadStream(filePath)) { 长探路者=长度; stream.Seek(startIndex,SeekOrigin.Begin); 使用(Stream outStream=context.Response.OutputStream) { //报告的字节已关闭,我们必须手动计数 //读取字节数 while(toRead>0&&stream.Read(buffer,0,chunk)>0) { long readSize=toRead>>>>>>捕获(异常INX) { if(context.Response.IsClientConnected) { Utils.Log.CustomError(“流式记录失败”+ 不精确消息+“”+不精确堆栈跟踪); } }

C# 远程主机关闭了连接。错误代码为0x800704CD。Firefox制造了一个问题 使用(Stream=\u client.GetDownloadStream(filePath)) { 长探路者=长度; stream.Seek(startIndex,SeekOrigin.Begin); 使用(Stream outStream=context.Response.OutputStream) { //报告的字节已关闭,我们必须手动计数 //读取字节数 while(toRead>0&&stream.Read(buffer,0,chunk)>0) { long readSize=toRead>>>>>>捕获(异常INX) { if(context.Response.IsClientConnected) { Utils.Log.CustomError(“流式记录失败”+ 不精确消息+“”+不精确堆栈跟踪); } },c#,.net,firefox,audio,audio-streaming,C#,.net,Firefox,Audio,Audio Streaming,我真正想做的事 -打开到我的服务器文件存储的SFTP连接。 -开始一条流。 -读取位并尝试写入以流回 我有什么问题? -上面的代码在Google Chrome、Microsoft Edge和Internet Explorer中完美地传输音频,但在Mozilla Firefox中却无法做到这一点 我的调查 -Firefox以某种方式清理了会话变量,也许这就是连接关闭的原因,但我还是放弃它,因为它允许我下载相同的文件,但不流式传输。 -我也读过:但找不到解决方案,或者至少找不到避免错误的方法 背景

我真正想做的事
-打开到我的服务器文件存储的SFTP连接。
-开始一条流。
-读取位并尝试写入以流回

我有什么问题?
-上面的代码在Google Chrome、Microsoft Edge和Internet Explorer中完美地传输音频,但在Mozilla Firefox中却无法做到这一点

我的调查
-Firefox以某种方式清理了会话变量,也许这就是连接关闭的原因,但我还是放弃它,因为它允许我下载相同的文件,但不流式传输。
-我也读过:但找不到解决方案,或者至少找不到避免错误的方法

背景
-开发C#-.NET应用程序,需要从存储中传输音频。 -我已在代码中用>>>>>>标记错误。这就是我发现异常的地方


非常期待有关如何解决此问题的指导。

这可能不是问题的原因,但请注意,对stream.Read(缓冲区、0、块)的调用可能返回的字节数与您预期的不同。假设此方法总是读取整个块是不安全的,如果它不读取,那么您将最终将从缓冲区向输出流写入垃圾字节。谢谢,我会记住这一点。还有,为了从错误中看出来,我应该看哪里@Rogern如果您还没有安装Firebug,您可以尝试安装Firebug,以查看它是否在客户端捕获可能相关的其他信息。不幸的是,正在生成的服务器端异常并没有给您太多的处理空间。是的,已经用尽了这个选项@RogerN,谢谢。这可能不是问题的原因,但请注意,对stream.Read(缓冲区、0、块)的调用可能返回的字节数与您预期的不同。假设此方法总是读取整个块是不安全的,如果它不读取,那么您将最终将从缓冲区向输出流写入垃圾字节。谢谢,我会记住这一点。还有,为了从错误中看出来,我应该看哪里@Rogern如果您还没有安装Firebug,您可以尝试安装Firebug,以查看它是否在客户端捕获可能相关的其他信息。不幸的是,正在生成的服务器端异常并没有给您太多的处理空间。是的,已经用尽了这个选项@罗根,谢谢你。
using (Stream stream = _client.GetDownloadStream(filePath))
                    {
                        long toRead = length;

                        stream.Seek(startIndex, SeekOrigin.Begin);

                        using (Stream outStream = context.Response.OutputStream)
                        {
                            // The reported bytes are off, we have to manually keep count
                            // of read bytes
                            while (toRead > 0 && stream.Read(buffer, 0, chunk) > 0)
                            {
                                long readSize = toRead < chunk ? toRead : chunk;
                                outStream.Write(buffer, 0, (int)readSize);
                                outStream.Flush();

                                toRead -= chunk;
                            }
                        }
                    }
                    context.Response.End();
                }
                else
                {
                    ErrorProcessing(context);
                }

            }
            catch (ThreadAbortException ex)
            {
                Utils.Log.Info("Aborted thread - User aborted download", ex);
            }
            >>>>>>>catch (Exception inex)
            {
                if (context.Response.IsClientConnected)
                {
                    Utils.Log.CustomError("Failed to stream recording " +
                                    inex.Message + " " + inex.StackTrace);
                }
            }