/// <summary>
        /// Process the HTTP Request.  Create XMLRPC request, find method call, process it and create response object and sent it back.
        /// This is the heart of the MetaWeblog API
        /// </summary>
        /// <param name="context">An <see cref="T:System.Web.HttpContext"/> object that provides references to the intrinsic server objects (for example, Request, Response, Session, and Server) used to service HTTP requests.</param>
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                var rootUrl = Utils.AbsoluteWebRoot.ToString();

                // context.Request.Url.ToString().Substring(0, context.Request.Url.ToString().IndexOf("metaweblog.axd"));
                var input = new XMLRPCRequest(context);
                var output = new XMLRPCResponse(input.MethodName);

                Security.ImpersonateUser(input.UserName, input.Password);

                // After user credentials have been set, we can use the normal Security
                // class to authorize individual requests.
                if (!Security.IsAuthenticated)
                {
                    throw new MetaWeblogException("11", "User authentication failed");
                }

                switch (input.MethodName)
                {
                    case "metaWeblog.newPost":
                        output.PostID = this.NewPost(
                            input.BlogID, input.UserName, input.Password, input.Post, input.Publish);
                        break;
                    case "metaWeblog.editPost":
                        output.Completed = this.EditPost(
                            input.PostID, input.UserName, input.Password, input.Post, input.Publish);
                        break;
                    case "metaWeblog.getPost":
                        output.Post = this.GetPost(input.PostID, input.UserName, input.Password);
                        break;
                    case "metaWeblog.newMediaObject":
                        output.MediaInfo = this.NewMediaObject(
                            input.BlogID, input.UserName, input.Password, input.MediaObject, context);
                        break;
                    case "metaWeblog.getCategories":
                        output.Categories = this.GetCategories(input.BlogID, input.UserName, input.Password, rootUrl);
                        break;
                    case "metaWeblog.getRecentPosts":
                        output.Posts = this.GetRecentPosts(
                            input.BlogID, input.UserName, input.Password, input.NumberOfPosts);
                        break;
                    case "blogger.getUsersBlogs":
                    case "metaWeblog.getUsersBlogs":
                        output.Blogs = this.GetUserBlogs(input.AppKey, input.UserName, input.Password, rootUrl);
                        break;
                    case "blogger.deletePost":
                        output.Completed = this.DeletePost(
                            input.AppKey, input.PostID, input.UserName, input.Password, input.Publish);
                        break;
                    case "blogger.getUserInfo":

                        // Not implemented.  Not planned.
                        throw new MetaWeblogException("10", "The method GetUserInfo is not implemented.");
                    case "wp.newPage":
                        output.PageID = this.NewPage(
                            input.BlogID, input.UserName, input.Password, input.Page, input.Publish);
                        break;
                    case "wp.getPageList":
                    case "wp.getPages":
                        output.Pages = this.GetPages(input.BlogID, input.UserName, input.Password);
                        break;
                    case "wp.getPage":
                        output.Page = this.GetPage(input.BlogID, input.PageID, input.UserName, input.Password);
                        break;
                    case "wp.editPage":
                        output.Completed = this.EditPage(
                            input.BlogID, input.PageID, input.UserName, input.Password, input.Page, input.Publish);
                        break;
                    case "wp.deletePage":
                        output.Completed = this.DeletePage(input.BlogID, input.PageID, input.UserName, input.Password);
                        break;
                    case "wp.getAuthors":
                        output.Authors = this.GetAuthors(input.BlogID, input.UserName, input.Password);
                        break;
                    case "wp.getTags":
                        output.Keywords = this.GetKeywords(input.BlogID, input.UserName, input.Password);
                        break;
                }

                output.Response(context);
            }
            catch (MetaWeblogException mex)
            {
                var output = new XMLRPCResponse("fault");
                var fault = new MWAFault { faultCode = mex.Code, faultString = mex.Message };
                output.Fault = fault;
                output.Response(context);
            }
            catch (Exception ex)
            {
                var output = new XMLRPCResponse("fault");
                var fault = new MWAFault { faultCode = "0", faultString = ex.Message };
                output.Fault = fault;
                output.Response(context);
            }
        }
        /// <summary>
        /// Process the HTTP Request.  Create XMLRPC request, find method call, process it and create response object and sent it back.
        /// This is the heart of the MetaWeblog API
        /// </summary>
        /// <param name="context">An <see cref="T:System.Web.HttpContext"/> object that provides references to the intrinsic server objects (for example, Request, Response, Session, and Server) used to service HTTP requests.</param>
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                var rootUrl = Utils.AbsoluteWebRoot.ToString();

                // context.Request.Url.ToString().Substring(0, context.Request.Url.ToString().IndexOf("metaweblog.axd"));
                var input  = new XMLRPCRequest(context);
                var output = new XMLRPCResponse(input.MethodName);

                Security.ImpersonateUser(input.UserName, input.Password);

                // After user credentials have been set, we can use the normal Security
                // class to authorize individual requests.
                if (!Security.IsAuthenticated)
                {
                    throw new MetaWeblogException("11", "User authentication failed");
                }

                switch (input.MethodName)
                {
                case "metaWeblog.newPost":
                    output.PostID = this.NewPost(
                        input.BlogID, input.UserName, input.Password, input.Post, input.Publish);
                    break;

                case "metaWeblog.editPost":
                    output.Completed = this.EditPost(
                        input.PostID, input.UserName, input.Password, input.Post, input.Publish);
                    break;

                case "metaWeblog.getPost":
                    output.Post = this.GetPost(input.PostID, input.UserName, input.Password);
                    break;

                case "metaWeblog.newMediaObject":
                    output.MediaInfo = this.NewMediaObject(
                        input.BlogID, input.UserName, input.Password, input.MediaObject, context);
                    break;

                case "metaWeblog.getCategories":
                    output.Categories = this.GetCategories(input.BlogID, input.UserName, input.Password, rootUrl);
                    break;

                case "metaWeblog.getRecentPosts":
                    output.Posts = this.GetRecentPosts(
                        input.BlogID, input.UserName, input.Password, input.NumberOfPosts);
                    break;

                case "blogger.getUsersBlogs":
                case "metaWeblog.getUsersBlogs":
                    output.Blogs = this.GetUserBlogs(input.AppKey, input.UserName, input.Password, rootUrl);
                    break;

                case "blogger.deletePost":
                    output.Completed = this.DeletePost(
                        input.AppKey, input.PostID, input.UserName, input.Password, input.Publish);
                    break;

                case "blogger.getUserInfo":

                    // Not implemented.  Not planned.
                    throw new MetaWeblogException("10", "The method GetUserInfo is not implemented.");

                case "wp.newPage":
                    output.PageID = this.NewPage(
                        input.BlogID, input.UserName, input.Password, input.Page, input.Publish);
                    break;

                case "wp.getPageList":
                case "wp.getPages":
                    output.Pages = this.GetPages(input.BlogID, input.UserName, input.Password);
                    break;

                case "wp.getPage":
                    output.Page = this.GetPage(input.BlogID, input.PageID, input.UserName, input.Password);
                    break;

                case "wp.editPage":
                    output.Completed = this.EditPage(
                        input.BlogID, input.PageID, input.UserName, input.Password, input.Page, input.Publish);
                    break;

                case "wp.deletePage":
                    output.Completed = this.DeletePage(input.BlogID, input.PageID, input.UserName, input.Password);
                    break;

                case "wp.getAuthors":
                    output.Authors = this.GetAuthors(input.BlogID, input.UserName, input.Password);
                    break;

                case "wp.getTags":
                    output.Keywords = this.GetKeywords(input.BlogID, input.UserName, input.Password);
                    break;
                }

                output.Response(context);
            }
            catch (MetaWeblogException mex)
            {
                var output = new XMLRPCResponse("fault");
                var fault  = new MWAFault {
                    faultCode = mex.Code, faultString = mex.Message
                };
                output.Fault = fault;
                output.Response(context);
            }
            catch (Exception ex)
            {
                var output = new XMLRPCResponse("fault");
                var fault  = new MWAFault {
                    faultCode = "0", faultString = ex.Message
                };
                output.Fault = fault;
                output.Response(context);
            }
        }
        /// <summary>
        /// Process the HTTP Request.  Create XMLRPC request, find method call, process it and create response object and sent it back.
        /// This is the heart of the MetaWeblog API
        /// </summary>
        /// <param name="context"></param>
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                string rootUrl = Utils.AbsoluteWebRoot.ToString();// context.Request.Url.ToString().Substring(0, context.Request.Url.ToString().IndexOf("metaweblog.axd"));
                XMLRPCRequest input = new XMLRPCRequest(context);
                XMLRPCResponse output = new XMLRPCResponse(input.MethodName);

                switch (input.MethodName)
                {
                    case "metaWeblog.newPost":
                        output.PostID = NewPost(input.BlogID, input.UserName, input.Password, input.Post, input.Publish);
                        break;
                    case "metaWeblog.editPost":
                        output.Completed = EditPost(input.PostID, input.UserName, input.Password, input.Post, input.Publish);
                        break;
                    case "metaWeblog.getPost":
                        output.Post = GetPost(input.PostID, input.UserName, input.Password);
                        break;
                    case "metaWeblog.newMediaObject":
                        output.MediaInfo = NewMediaObject(input.BlogID, input.UserName, input.Password, input.MediaObject, context);
                        break;
                    case "metaWeblog.getCategories":
                        output.Categories = GetCategories(input.BlogID, input.UserName, input.Password, rootUrl);
                        break;
                    case "metaWeblog.getRecentPosts":
                        output.Posts = GetRecentPosts(input.BlogID, input.UserName, input.Password, input.NumberOfPosts);
                        break;
                    case "blogger.getUsersBlogs":
                    case "metaWeblog.getUsersBlogs":
                        output.Blogs = GetUserBlogs(input.AppKey, input.UserName, input.Password, rootUrl);
                        break;
                    case "blogger.deletePost":
                        output.Completed = DeletePost(input.AppKey, input.PostID, input.UserName, input.Password, input.Publish);
                        break;
                    case "blogger.getUserInfo":
                        //Not implemented.  Not planned.
                        throw new MetaWeblogException("10", "The method GetUserInfo is not implemented.");
                    case "wp.newPage":
                        output.PageID = NewPage(input.BlogID, input.UserName, input.Password, input.Page, input.Publish);
                        break;
                    case "wp.getPageList":
                    case "wp.getPages":
                        output.Pages = GetPages(input.BlogID, input.UserName, input.Password);
                        break;
                    case "wp.getPage":
                        output.Page = GetPage(input.BlogID, input.PageID, input.UserName, input.Password);
                        break;
                    case "wp.editPage":
                        output.Completed = EditPage(input.BlogID, input.PageID, input.UserName, input.Password, input.Page, input.Publish);
                        break;
                    case "wp.deletePage":
                        output.Completed = DeletePage(input.BlogID, input.PageID, input.UserName, input.Password);
                        break;
                    case "wp.getAuthors":
                        output.Authors = GetAuthors(input.BlogID, input.UserName, input.Password);
                        break;
                    case "wp.getTags":
                        output.Keywords = GetKeywords(input.BlogID, input.UserName, input.Password);
                        break;
                }

                output.Response(context);
            }
            catch (MetaWeblogException mex)
            {
                XMLRPCResponse output = new XMLRPCResponse("fault");
                MWAFault fault = new MWAFault();
                fault.faultCode = mex.Code;
                fault.faultString = mex.Message;
                output.Fault = fault;
                output.Response(context);
            }
            catch (Exception ex)
            {
                XMLRPCResponse output = new XMLRPCResponse("fault");
                MWAFault fault = new MWAFault();
                fault.faultCode = "0";
                fault.faultString = ex.Message;
                output.Fault = fault;
                output.Response(context);
            }
        }
        /// <summary>
        /// Process the HTTP Request.  Create XMLRPC request, find method call, process it and create response object and sent it back.
        /// This is the heart of the MetaWeblog API
        /// </summary>
        /// <param name="context"></param>
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                string         rootUrl = Utils.AbsoluteWebRoot.ToString();        // context.Request.Url.ToString().Substring(0, context.Request.Url.ToString().IndexOf("metaweblog.axd"));
                XMLRPCRequest  input   = new XMLRPCRequest(context);
                XMLRPCResponse output  = new XMLRPCResponse(input.MethodName);

                switch (input.MethodName)
                {
                case "metaWeblog.newPost":
                    output.PostID = NewPost(input.BlogID, input.UserName, input.Password, input.Post, input.Publish);
                    break;

                case "metaWeblog.editPost":
                    output.Completed = EditPost(input.PostID, input.UserName, input.Password, input.Post, input.Publish);
                    break;

                case "metaWeblog.getPost":
                    output.Post = GetPost(input.PostID, input.UserName, input.Password);
                    break;

                case "metaWeblog.newMediaObject":
                    output.MediaInfo = NewMediaObject(input.BlogID, input.UserName, input.Password, input.MediaObject, context);
                    break;

                case "metaWeblog.getCategories":
                    output.Categories = GetCategories(input.BlogID, input.UserName, input.Password, rootUrl);
                    break;

                case "metaWeblog.getRecentPosts":
                    output.Posts = GetRecentPosts(input.BlogID, input.UserName, input.Password, input.NumberOfPosts);
                    break;

                case "blogger.getUsersBlogs":
                case "metaWeblog.getUsersBlogs":
                    output.Blogs = GetUserBlogs(input.AppKey, input.UserName, input.Password, rootUrl);
                    break;

                case "blogger.deletePost":
                    output.Completed = DeletePost(input.AppKey, input.PostID, input.UserName, input.Password, input.Publish);
                    break;

                case "blogger.getUserInfo":
                    //Not implemented.  Not planned.
                    throw new MetaWeblogException("10", "The method GetUserInfo is not implemented.");

                case "wp.newPage":
                    output.PageID = NewPage(input.BlogID, input.UserName, input.Password, input.Page, input.Publish);
                    break;

                case "wp.getPageList":
                case "wp.getPages":
                    output.Pages = GetPages(input.BlogID, input.UserName, input.Password);
                    break;

                case "wp.getPage":
                    output.Page = GetPage(input.BlogID, input.PageID, input.UserName, input.Password);
                    break;

                case "wp.editPage":
                    output.Completed = EditPage(input.BlogID, input.PageID, input.UserName, input.Password, input.Page, input.Publish);
                    break;

                case "wp.deletePage":
                    output.Completed = DeletePage(input.BlogID, input.PageID, input.UserName, input.Password);
                    break;

                case "wp.getAuthors":
                    output.Authors = GetAuthors(input.BlogID, input.UserName, input.Password);
                    break;

                case "wp.getTags":
                    output.Keywords = GetKeywords(input.BlogID, input.UserName, input.Password);
                    break;
                }

                output.Response(context);
            }
            catch (MetaWeblogException mex)
            {
                XMLRPCResponse output = new XMLRPCResponse("fault");
                MWAFault       fault  = new MWAFault();
                fault.faultCode   = mex.Code;
                fault.faultString = mex.Message;
                output.Fault      = fault;
                output.Response(context);
            }
            catch (Exception ex)
            {
                XMLRPCResponse output = new XMLRPCResponse("fault");
                MWAFault       fault  = new MWAFault();
                fault.faultCode   = "0";
                fault.faultString = ex.Message;
                output.Fault      = fault;
                output.Response(context);
            }
        }