예제 #1
0
        // parses URL string assuming the format /<wsPrefix>/<module>/<function>/<parameter1>/<parameter2>/...
        private ParsedUrl ParseUrl(string rawUrl)
        {
            ParsedUrl parsedUrl = new ParsedUrl();

            // check that the string does indeed start with wsPrefix
            if (!rawUrl.StartsWith("/" + Configuration.wsPrefix + "/"))
            {
                parsedUrl.IsWebServiceRequest = false;
            }
            else
            {
                parsedUrl.IsWebServiceRequest = true;

                string[] parsedUrlTemp = rawUrl.Split('/');

                if (parsedUrlTemp.Count() < 4)
                {
                    return(null);
                }

                parsedUrl.module     = parsedUrlTemp[2];
                parsedUrl.function   = parsedUrlTemp[3];
                parsedUrl.parameters = parsedUrlTemp.Where((val, idx) => idx > 3).ToArray();

                // restore spaces as they should be
                for (int i = 0; i < parsedUrl.parameters.Count(); i++)
                {
                    parsedUrl.parameters[i] = parsedUrl.parameters[i].Replace("%20", " ");
                    parsedUrl.parameters[i] = parsedUrl.parameters[i].Replace("%5C", "\\");
                }
            }

            return(parsedUrl);
        }
예제 #2
0
        public string ProcessDynamic(ParsedUrl parsedUrl, string postData)
        {
            _logger.Debug("Module: " + parsedUrl.module);
            _logger.Debug("Function: " + parsedUrl.function);
            foreach (string parameter in parsedUrl.parameters)
            {
                _logger.Debug("Parameter: " + parameter);
            }

            if (!Manager.IsRepositoryAccessible)
            {
                ReturnError(String.Format("Statistics repository [{0}].[{1}] is not accessible",
                                          Configuration.reposInstance,
                                          Configuration.reposDatabase
                                          )
                            );
            }

            // find class name corresponding to requested module
            if (!Configuration.moduleClassMapping.ContainsKey(parsedUrl.module))
            {
                return(ReturnError("Module " + parsedUrl.module + " cannot be found"));
            }

            string requestProcessorClassName = Configuration.moduleClassMapping[parsedUrl.module];
            Type   requestProcessorType      = Type.GetType(requestProcessorClassName);

            if (requestProcessorType == null)
            {
                return(ReturnError("Type for class " + requestProcessorClassName + " cannot be found"));
            }

            // create an instance of the class that will process the request
            object requestProcessor =
                Activator.CreateInstance(
                    requestProcessorType,
                    new object[] { _cfg });

            // call ProcessRequest method of the class
            WebServiceResult requestProcessorResponse =
                (WebServiceResult)requestProcessorType.GetMethod("ProcessRequest").Invoke(
                    requestProcessor,
                    new object[] { parsedUrl.function, parsedUrl.parameters, postData });

            if (requestProcessorResponse.Success)
            {
                return(ReturnSuccess(requestProcessorResponse.Message));
            }

            return(ReturnError(requestProcessorResponse.Message));
        } // end of ProcessDynamic method
예제 #3
0
        public string ProcessDynamic(ParsedUrl parsedUrl, string postData)
        {
            _logger.Debug("Module: " + parsedUrl.module);
            _logger.Debug("Function: " + parsedUrl.function);
            foreach (string parameter in parsedUrl.parameters)
                _logger.Debug("Parameter: " + parameter);

            if (!Manager.IsRepositoryAccessible)
            {
                ReturnError(String.Format("Statistics repository [{0}].[{1}] is not accessible",
                                Configuration.reposInstance,
                                Configuration.reposDatabase
                                )
                            );
            }

            // find class name corresponding to requested module
            if (!Configuration.moduleClassMapping.ContainsKey(parsedUrl.module))
            {
                return ReturnError("Module " + parsedUrl.module + " cannot be found");
            }

            string requestProcessorClassName = Configuration.moduleClassMapping[parsedUrl.module];
            Type requestProcessorType = Type.GetType(requestProcessorClassName);
            if (requestProcessorType == null)
            {
                return ReturnError("Type for class " + requestProcessorClassName + " cannot be found");
            }

            // create an instance of the class that will process the request
            object requestProcessor =
                Activator.CreateInstance(
                    requestProcessorType,
                    new object[] { _cfg });

            // call ProcessRequest method of the class
            WebServiceResult requestProcessorResponse =
                (WebServiceResult)requestProcessorType.GetMethod("ProcessRequest").Invoke(
                    requestProcessor,
                    new object[] { parsedUrl.function, parsedUrl.parameters, postData });

            if (requestProcessorResponse.Success)
                return ReturnSuccess(requestProcessorResponse.Message);

            return ReturnError(requestProcessorResponse.Message);
        }
예제 #4
0
        // parses URL string assuming the format /<wsPrefix>/<module>/<function>/<parameter1>/<parameter2>/...
        private ParsedUrl ParseUrl(string rawUrl)
        {
            ParsedUrl parsedUrl = new ParsedUrl();

            // check that the string does indeed start with wsPrefix
            if (!rawUrl.StartsWith("/" + Configuration.wsPrefix + "/"))
                parsedUrl.IsWebServiceRequest = false;
            else
            {
                parsedUrl.IsWebServiceRequest = true;

                string[] parsedUrlTemp = rawUrl.Split('/');

                if (parsedUrlTemp.Count() < 4)
                    return null;

                parsedUrl.module = parsedUrlTemp[2];
                parsedUrl.function = parsedUrlTemp[3];
                parsedUrl.parameters = parsedUrlTemp.Where((val, idx) => idx > 3).ToArray();

                // restore spaces as they should be
                for (int i = 0; i < parsedUrl.parameters.Count(); i++)
                {
                    parsedUrl.parameters[i] = parsedUrl.parameters[i].Replace("%20", " ");
                    parsedUrl.parameters[i] = parsedUrl.parameters[i].Replace("%5C", "\\");
                }
            }

            return parsedUrl;
        }