Máy chủ từ xa đã đóng kết nối. Mã lỗi là 0x800704CD


81

Tôi nhận được email lỗi từ trang web của mình bất cứ khi nào xảy ra ngoại lệ. Tôi nhận được lỗi này:

Máy chủ từ xa đã đóng kết nối. Mã lỗi là 0x800704CD

và không biết tại sao. Tôi nhận được khoảng 30 một ngày. Tôi cũng không thể tái tạo lỗi nên không thể theo dõi vấn đề.

Trang web là ASP.NET 2 chạy trên IIS7.

Dấu vết ngăn xếp:

tại System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError (kết quả Int32, Boolean némOnDisconnect) tại System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush () tại System.Web.HttpResponse.Flush (Boolean finalFlush) tại SystemFlush (Boolean finalFlush) ) tại System.Web.HttpResponse.End () tại System.Web.UI.HttpResponseWrapper.System.Web.UI.IHttpResponse.End () tại System.Web.UI.PageRequestManager.OnPageError (Người gửi đối tượng, EventArgs e) .Web.UI.TemplateControl.OnError (EventArgs e) tại System.Web.UI.Page.HandleError (Exception e) tại System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) tại System.WencPoint. Page.ProcessRequest (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) tại System.Web.UI.Page.ProcessRequest () tại System.Web.UI.Page.ProcessRequestWithNoAssert (ngữ cảnh HttpContext) tại System.Web.UI.Page.ProcessRequest (ngữ cảnh HttpContext) tại ASP.default_aspx.ProcessRequest (ngữ cảnh HttpContext) tại System.Web.HttpApplication.CallHandlerExecutionSteblication. IExecutionStep.Execute () tại System.Web.HttpApplication.ExecuteStep (bước IExecutionStep, Boolean & completeSynchronously)

Câu trả lời:


60

Tôi nhận được cái này mọi lúc. Nó có nghĩa là người dùng bắt đầu tải xuống một tệp, và sau đó nó không thành công hoặc họ đã hủy nó.

Để tạo lại ngoại lệ, hãy thử tự làm điều này - tuy nhiên tôi không biết bất kỳ cách nào để ngăn chặn nó (ngoại trừ chỉ xử lý ngoại lệ cụ thể này).

Bạn cần quyết định cách tốt nhất về phía trước là tùy thuộc vào ứng dụng của bạn.


Tôi không cung cấp bất kỳ tải xuống tệp nào trên trang web của mình. Tải xuống nội dung trang có gây ra nó không?
webnoob

7
Đúng vậy, nhìn vào dấu vết ngăn xếp System.Web.HttpResponse.Flush()có nghĩa là bất kỳ loại phản hồi nào. Tôi vừa tìm thấy điều này , nó có thể giúp bạn giải quyết vấn đề trong đó viewstate rất lớn và người dùng nhấp quá nhanh có thể gây ra ngoại lệ này.
m.edmondson

Bạn có biết nếu điều này tạo ra lỗi cho người dùng hay chỉ là một lỗi bị ẩn?
webnoob

2
Các cuộc điều tra của riêng tôi về điều này cho thấy rằng người dùng không thấy gì khác thường. Bạn đã có bất kỳ phàn nàn nào từ khách hàng / khách hàng?
m.edmondson

2
Không, không. Cảm ơn đã giúp đỡ.
webnoob

30

Như m.edmondson đã đề cập , "Máy chủ từ xa đã đóng kết nối." xảy ra khi người dùng hoặc trình duyệt hủy một thứ gì đó , hoặc kết nối mạng bị ngắt, v.v. Tuy nhiên, nó không nhất thiết phải là tải xuống tệp, chỉ cần bất kỳ yêu cầu nào đối với bất kỳ tài nguyên nào dẫn đến phản hồi cho máy khách. Về cơ bản, lỗi có nghĩa là không thể gửi phản hồi vì máy chủ không còn có thể nói chuyện với máy khách (trình duyệt).

Có một số bước mà bạn có thể thực hiện để ngăn nó xảy ra. Nếu bạn đang gửi thủ công nội dung nào đó trong phản hồi với Response.Write, Response.Flush, trả về dữ liệu từ phương thức web servivce / page hoặc thứ gì đó tương tự, thì bạn nên cân nhắc kiểm tra Response.IsClientConnected trước khi gửi phản hồi. Ngoài ra, nếu phản hồi có khả năng mất nhiều thời gian hoặc yêu cầu nhiều xử lý phía máy chủ, bạn nên kiểm tra điều này định kỳ cho đến khi đáp ứng.end nếu được gọi. Xem phần sau để biết chi tiết về tài sản này:

http://msdn.microsoft.com/en-us/library/system.web.httpresponse.isclientconnected.aspx

Ngoài ra, tôi tin rằng rất có thể trong trường hợp của bạn, lỗi là do một cái gì đó bên trong khung gây ra. Liên kết sau có thể được sử dụng:

http://blog.whitesites.com/fixing-The-remote-host-closed-the-connection-The-error-code-is-0x80070057__633882307305519259_blog.htm

Bài đăng sau tràn ngăn xếp cũng có thể được quan tâm:

"Máy chủ từ xa đã đóng kết nối" trong Response.OutputStream.Write


2
Lớn lên cho Response.IsClientConnected!
Stumblor

10

Người ta có thể tạo lại lỗi với mã dưới đây:

public ActionResult ClosingTheConnectionAction(){
   try
   {
      //we need to set buffer to false to
      //make sure data is written in chunks
      Response.Buffer = false;  
      var someText = "Some text here to make things happen ;-)";
      var content = GetBytes( someText );

      for(var i=0; i < 100; i++)
      {
         Response.OutputStream.Write(content, 0, content.Length);
      }

      return View();
   }
   catch(HttpException hex)
   {
      if (hex.Message.StartsWith("The remote host closed the connection. The error code is 0x800704CD."))
            {
                //react on remote host closed the connection exception.
                var msg = hex.Message;
            }  
   }
   catch(Exception somethingElseHappened)
   {
      //handle it with some other code
   }

   return View();
} 

Bây giờ chạy trang web ở chế độ gỡ lỗi. Đặt một điểm ngắt trong vòng lặp ghi vào luồng đầu ra. Chuyển đến phương thức hành động đó và sau khi lần lặp đầu tiên trôi qua, hãy đóng tab của trình duyệt. Nhấn F10 để tiếp tục vòng lặp. Sau khi nó đạt được lần lặp tiếp theo, bạn sẽ thấy ngoại lệ. Tận hưởng ngoại lệ của bạn :-)


2

Tôi đã nhận được điều này trên trang web asp.net 2.0 iis7 Windows2008. Mã tương tự trên iis6 hoạt động tốt. Nó đã gây ra sự cố cho tôi vì nó làm rối loạn quá trình đăng nhập. Người dùng sẽ đăng nhập và nhận 302 vào default.asxp, sẽ đi qua page_load, nhưng không xa như pre-render trước khi iis7 gửi lại 302 cho login.aspx mà không có cookie xác thực. Tôi bắt đầu chơi với cài đặt nhóm ứng dụng và vì một số lý do 'kích hoạt ứng dụng 32 bit' dường như đã sửa nó. Không hiểu tại sao, vì trang web này không làm bất cứ điều gì đặc biệt mà cần bất kỳ trình điều khiển 32 bit nào. Chúng tôi có một số trang web vẫn sử dụng Access yêu cầu 32bit, nhưng không phải các trang web SQL thông thường của chúng tôi như trang này.


Việc bật các ứng dụng 32 bit cũng đã khắc phục sự cố đó cho tôi. Cảm ơn !
Praneet Nadkar,

Việc kích hoạt ứng dụng 32 bit có thể dẫn đến ứng dụng sử dụng ít bộ nhớ hơn, điều này có thể gợi ý rằng có sự cố bộ nhớ trên máy chủ. Đây cũng có thể là một vấn đề hoàn toàn khác.
jahu

2

Tôi gặp lỗi này khi đọc động dữ liệu từ a WebRequestvà không bao giờ đóng Response.

    protected System.IO.Stream GetStream(string url)
    {
        try
        {
            System.IO.Stream stream = null;
            var request = System.Net.WebRequest.Create(url);
            var response = request.GetResponse();

            if (response != null) {
                stream = response.GetResponseStream();

                // I never closed the response thus resulting in the error
                response.Close(); 
            }
            response = null;
            request = null;

            return stream;
        }
        catch (Exception) { }
        return null;
    }

1

Tôi cũng gặp lỗi tương tự trên trình xử lý hình ảnh mà tôi đã viết. Tôi nhận được nó giống như 30 lần một ngày trên trang web có lượng truy cập lớn, tôi cũng cố gắng tái tạo nó. Bạn nhận được điều này khi người dùng hủy yêu cầu (đóng trang hoặc kết nối internet của anh ấy bị gián đoạn chẳng hạn), trong trường hợp của tôi ở hàng sau:

myContext.Response.OutputStream.Write(buffer, 0, bytesRead);

Tôi không thể nghĩ ra bất kỳ cách nào để ngăn chặn nó nhưng có lẽ bạn có thể xử lý đúng cách này. Ví dụ:

        try
        {
            …
            myContext.Response.OutputStream.Write(buffer, 0, bytesRead);
            …
        }catch (HttpException ex)
        {
            if (ex.Message.StartsWith("The remote host closed the connection."))
                ;//do nothing
            else
                //handle other errors
        }            
        catch (Exception e)
        {
            //handle other errors
        }
        finally
        {//close streams etc..
        }

4
Điều này thất bại thảm hại khi văn hóa máy chủ không phải là tiếng Anh (vì thư sẽ bằng ngôn ngữ khác). Chỉ cần sử dụng ErrorCodethuộc tính của ngoại lệ (phải bằng 2147943629, HRESULT 0x800704CD).
Ronald

4
Đính chính: ErrorCodeHRESULT 0x800704CD là -2147023667.
Ronald

Tôi chưa bao giờ sử dụng văn hóa máy chủ không phải tiếng Anh, nhưng tôi thấy vấn đề của bạn. Không bao giờ là ít hơn, bạn có thể thay đổi điều đó một dòng mã để xử lý nền văn hóa máy chủ khác nhau, giống như một bạn đề nghị
Robert Benyi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.