docs: function (endPoint, request, response) {
                  var self = this,
                      context,
                      requestHandler,
                      handledWithErrorHandler = false,
                      buffers = [],
                      bufferLength = 0;
  
                  // create a new application domain for the request
                  var domain = Domain.create();
  
                  domain.add(request);
                  domain.add(response);
  
                  // request.setEncoding('utf8');
  
                  request.on('data', function (chunk) {
                      buffers.push(chunk);
                      bufferLength += chunk.length;
                  });
  
                  response.on('close', function () {
                      domain.dispose();
                  });
  
                  domain.on('error', handleError);
  
  
                  request.on('end', function () {
  
                      request.body = new Buffer(bufferLength);
  
                      var pos = 0;
  
                      for (var i = 0; i < buffers.length; i++) {
                          buffers[i].copy(request.body, pos);
                          pos += buffers[i].length;
                      }
  
                      request.body.content = request.body.toString();
  
                      buffers = null;
  
                      domain.run(function () {
                          // create the new context object
                          context = new Context(self, endPoint, request, response);
  
                          // and set the chosen handler
                          requestHandler = self.$handlers.getRequestHandler(context);
                          context.handler = requestHandler;
  
                          flow()
                              .seq(function (cb) {
                                  context._executeHook("beginRequest", cb);
                              })
                              .seq(function (cb) {
                                  if (requestHandler.$.autoStartSession) {
                                      context.session.start(cb);
                                  } else {
                                      cb();
                                  }
                              })
                              .seq(function (cb) {
                                  requestHandler.handleRequest(context, cb);
                              })
                              .exec(function (err) {
                                  if (err) {
                                      handleError(err);
                                  } else {
                                      context.response.end();
                                  }
                              });
                      });
                  });
  
                  function handleError(err) {
  
                      if (!handledWithErrorHandler) {
                          handledWithErrorHandler = true;
  
                          var exceptionHandler = new ExceptionHandler(err);
                          try {
                              exceptionHandler.handleRequest(context, function (err) {
                                  err && handleErrorTheHardWay(err);
                              });
                          } catch (e) {
                              handleErrorTheHardWay(err);
                          }
  
                      } else {
                          // error handler didn't do the job well
                          handleErrorTheHardWay(err);
                      }
                  }
  
                  function handleErrorTheHardWay(error) {
  
                      console.error(error);
  
                      try {
                          response.writeHead(500);
                      } catch (error) {
                          console.error('Error sending 500', error, request.url);
                      }
  
                      response.end('Internal Server Error');
                      domain.dispose();
                  }
  
              }