protected void Respond(INodeEndpointRequest request, object response)
        {
            Stream streamResponse = response as Stream;

            if (streamResponse != null)
            {
                request.Respond(streamResponse);
            }
            else
            {
                request.Respond(this.Serializer.Serialize(response));
            }
        }
 protected override void OnQueueRequest(INodeEndpointRequest request)
 {
     try
     {
         MethodInfo method = null;
         if (this.methods.TryGetValue(request.Method, out method))
         {
             ParameterInfo firstParameter = method.GetParameters().FirstOrDefault();
             if (firstParameter != null && firstParameter.ParameterType == typeof(INodeEndpointRequest))
             {
                 method.Invoke(this,
                               new object[] { request }
                               .Concat(Translate(method.GetParameters().Skip(1), request.Body))
                               .ToArray()
                               );
             }
             else
             {
                 object result = method.Invoke(this, Translate(method.GetParameters(), request.Body));
                 if (method.ReturnType == typeof(void))
                 {
                     request.Respond();
                 }
                 else
                 {
                     Respond(request, result);
                 }
             }
         }
         else
         {
             request.Respond(new InvalidOperationException("Method \"" + request.Method + "\" not exists."));
         }
     }
     catch (TargetInvocationException exception)
     {
         request.Respond(exception.InnerException);
     }
     catch (Exception)
     {
         request.Respond(new InvalidOperationException("Cannot parse parameters."));
     }
 }