public override bool TryBinding(IHttpContext context, IPathStack path, object controller, out IHttpHandler handler)
        {
            if (path.IsAtEnd)
            {
                handler = null; return(false);
            }
            string method = path.Pop();

            if (!path.IsAtEnd)
            {
                handler = null; return(false);
            }

            IService service = controller as IService;

            if (service == null)
            {
                throw new Exception("ProtobufControllerAttribute can only be applied to classes implementing IService.");
            }

            var descriptor = service.DescriptorForType.FindMethodByName(method);

            if (descriptor == null)
            {
                handler = null; return(false);
            }

            IMessage request;

            string verb = context.Request.HttpMethod;

            if (verb == "GET")
            {
                request = null;
            }
            else if (verb == "POST" && context.Request.ContentType == CONTENT_TYPE)
            {
                request =
                    service.GetRequestPrototype(descriptor)
                    .WeakToBuilder()
                    .WeakMergeFrom(CodedInputStream.CreateInstance(context.Request.InputStream))
                    .WeakBuild();
            }
            else
            {
                handler = null;
                return(false);
            }

            handler = new ProtobufServiceHandler(service, descriptor, request);
            return(true);
        }
		public override bool TryBinding(IHttpContext context, IPathStack path, object controller, out IHttpHandler handler)
		{
			if (path.IsAtEnd){ handler = null; return false; }
			string method = path.Pop();
			if (!path.IsAtEnd){ handler = null; return false; }

			IService service = controller as IService;
			if (service == null) throw new Exception("ProtobufControllerAttribute can only be applied to classes implementing IService.");

			var descriptor = service.DescriptorForType.FindMethodByName(method);
			if (descriptor == null){ handler = null; return false; }

			IMessage request;

			string verb = context.Request.HttpMethod;
			if (verb == "GET")
			{
				request = null;
			}
			else if (verb == "POST" && context.Request.ContentType == CONTENT_TYPE)
			{
				request =
					service.GetRequestPrototype(descriptor)
					.WeakToBuilder()
					.WeakMergeFrom(CodedInputStream.CreateInstance(context.Request.InputStream))
					.WeakBuild();
			}
			else
			{
				handler = null;
				return false;
			}

			handler = new ProtobufServiceHandler(service, descriptor, request);
			return true;
		}