private void ProcessException(Exception exception) { if (_disposed) return; _errored = true; // If there is no request available, the error didn't occur as part // of a request (e.g. the client closed the connection). Just close // the channel in that case. if (Request == null) { Dispose(); return; } try { if (_context == null) _context = new HttpContext(this); _context.Response.Status = "500 Internal Server Error"; bool handled; try { handled = Server.RaiseUnhandledException(_context, exception); } catch { handled = false; } if (!handled && _context.Response.OutputStream.CanWrite) { string resourceName = GetType().Namespace + ".Resources.InternalServerError.html"; using (var stream = GetType().Assembly.GetManifestResourceStream(resourceName)) { byte[] buffer = new byte[4096]; int read; while ((read = stream.Read(buffer, 0, buffer.Length)) != 0) { _context.Response.OutputStream.Write(buffer, 0, read); } } } WriteResponseHeaders(); } catch (Exception /*ex*/) { Dispose(); } }