public void ProcessRequest(
            HttpContext context)
        {
            ChunkUploadParameter chunkUploadParameter = null;
            try
            {
                if (context.Request.HttpMethod == "POST")
                {
                    chunkUploadParameter = InitChunkUploadParameter(context.Request.Form);

                    HandleUploadedChunk(context, chunkUploadParameter);

                    Logger.Info("Post Uploadedchunk done.", chunkUploadParameter);
                }
                else
                {
                    chunkUploadParameter = InitChunkUploadParameter(context.Request.QueryString);
                    CheckIfChunkExistAndIsComplete(context, chunkUploadParameter);

                    Logger.Info("Check if chunk exists done.", chunkUploadParameter);
                }
            }
            catch (Exception exception)
            {
                ChunkedUploadException chunkedUploadException;
                if (exception is ChunkedUploadException)
                {
                    chunkedUploadException = exception as ChunkedUploadException;
                }
                else
                {
                    chunkedUploadException = new ChunkedUploadException(
                        exception.Message,
                        exception,
                        chunkUploadParameter);
                }

                OnUploadError(chunkedUploadException);

                context.Response.StatusCode = 500;
            }
        }
        internal static void OnUploadError(
            ChunkedUploadException chunkedUploadException)
        {
            Logger.Error(
                chunkedUploadException.Message,
                chunkedUploadException,
                chunkedUploadException.ChunkUploadParameter);

            if (UploadException != null)
                UploadException(chunkedUploadException);
        }