public XmlDocument RunFromHTTPGet()
        {
            string request  = Utils.GetParameter("request");
            string service  = Utils.GetParameter("service");
            string version  = Utils.GetParameter("version");
            string language = Utils.GetParameter("language", Global.DefaultLanguage);

            ExceptionReport exception = null;

            if (service != "WPS")
            {
                exception = new ExceptionReport(exception, "The service requested must be a WPS service.",
                                                ExceptionCode.InvalidParameterValue, "service");
            }

            if (!Global.SupportedLanguages.Contains(language))
            {
                exception = new ExceptionReport(exception, "The language '" + language + "' is not supported by this WPS service. " +
                                                "Use one of the followings: " + string.Join(", ", Global.SupportedLanguages.ToArray()),
                                                ExceptionCode.InvalidParameterValue, "language");
            }

            if (string.IsNullOrEmpty(request))
            {
                exception = new ExceptionReport(exception, ExceptionCode.MissingParameterValue, "request");
            }

            if (exception != null)
            {
                throw exception;
            }

            // Execute an operation depending of the Request
            // version attribute is not present in a GetCApabilities request
            if (Utils.StrICmp(request, "GetCapabilities"))
            {
                return(GetCapabilities.RunFromHTTPGet(language));
            }

            // TODO handle many versions is possible. Do it ?
            if (string.IsNullOrEmpty(version))
            {
                throw new ExceptionReport(ExceptionCode.MissingParameterValue, "version");
            }

            if (version != Global.WPSVersion)
            {
                throw new ExceptionReport("The requested version '" + version + "' is not supported by this WPS server.",
                                          ExceptionCode.VersionNegotiationFailed, "version");
            }

            if (Utils.StrICmp(request, "DescribeProcess"))
            {
                return(DescribeProcess.RunFromHTTPGet(language));
            }

            if (Utils.StrICmp(request, "Execute"))
            {
                return(Execute.RunFromHTTPGet(language));
            }

            throw new ExceptionReport("The requested operation '" + request + "' is unknown.",
                                      ExceptionCode.InvalidParameterValue, "request");
        }
        public XmlDocument RunFromHTTPPost()
        {
            XmlDocument doc = new XmlDocument();

            try
            {
                StreamReader MyStreamReader = new StreamReader(this.Context.Request.InputStream);
                doc.LoadXml(MyStreamReader.ReadToEnd());
                MyStreamReader.Close();
            }
            catch (Exception e)
            {
                throw new ExceptionReport("Error when reading posted data. The xml syntax seems incorrect:\n" + e.Message);
            }

            XmlNamespaceManager nsmgr = Utils.CreateWPSNamespaceManager(doc);

            XmlNode requestNode = doc.DocumentElement;

            string service  = Utils.GetXmlAttributesValue(requestNode, "service");
            string version  = Utils.GetXmlAttributesValue(requestNode, "version");
            string language = Utils.GetXmlAttributesValue(requestNode, "language", Global.DefaultLanguage);

            ExceptionReport exception = null;

            if (service != "WPS")
            {
                exception = new ExceptionReport("The service requested must be a WPS service.",
                                                ExceptionCode.InvalidParameterValue, "service");
            }

            if (!Global.SupportedLanguages.Contains(language))
            {
                exception = new ExceptionReport(exception, "The language '" + language + "' is not supported by this WPS service. " +
                                                "Use one of the followings: " + string.Join(", ", Global.SupportedLanguages.ToArray()),
                                                ExceptionCode.InvalidParameterValue, "language");
            }

            if (string.IsNullOrEmpty(requestNode.Name))
            {
                exception = new ExceptionReport(exception, ExceptionCode.MissingParameterValue, "request");
            }

            if (exception != null)
            {
                throw exception;
            }

            if (doc.SelectSingleNode("/wps:GetCapabilities", nsmgr) == requestNode)
            {
                return(GetCapabilities.RunFromHTTPPost(requestNode, language));
            }

            if (string.IsNullOrEmpty(version))
            {
                throw new ExceptionReport(ExceptionCode.MissingParameterValue, "version");
            }
            else if (version != Global.WPSVersion)
            {
                throw new ExceptionReport("The requested version '" + version + "' is not supported by this WPS server.",
                                          ExceptionCode.VersionNegotiationFailed, "version");
            }

            else if (doc.SelectSingleNode("/wps:DescribeProcess", nsmgr) == requestNode)
            {
                return(DescribeProcess.RunFromHTTPPost(requestNode, language));
            }

            else if (doc.SelectSingleNode("/wps:Execute", nsmgr) == requestNode)
            {
                return(Execute.RunFromHTTPPost(requestNode, language));
            }

            throw new ExceptionReport("The requested operation '" + requestNode.Name + "' is unknown.",
                                      ExceptionCode.InvalidParameterValue, "request");
        }