예제 #1
0
        /// <summary>
        /// Executa a requisição de modo assíncrono utilizando o método HTTP enviado e retorna o resultado a partir dos delegates de callback. Esse overload tem suporte a track de porcentagem de upload
        /// </summary>
        /// <param name="method">Método HTTP a ser utilizado para fazer a requisição</param>
        /// <param name="sucessResultWithStreamHandler">Handler chamado quando houver sucesso na requisição</param>
        /// <param name="progressChangedHandler">Handler chamado para notificar o progresso de upload da requisição</param>
        /// <param name="errorResultHandler">Handler chamado quando houver erro na requisição</param>
        /// <owner>Mnix-Victor</owner>
        public void ExecuteAsync(HttpMethod method, SuccessResultHandler successResultHandler, UploadProgressChangedHandler progressChangedHandler, ErrorResultHandler errorResultHandler)
        {
            if (method == HttpMethod.GET && progressChangedHandler != null)
            {
                throw new InvalidHTTPMethodForProgressTrackingException(method);
            }

            this._mIsRequestRunning = true;

            Thread newThread = new Thread(delegate()
            {
                try
                {
                    Stream responseStream = MakeRequest(method, progressChangedHandler);

                    string resultString = MountReturnString(responseStream);
                    responseStream.Close();

                    successResultHandler.Invoke(this, resultString);
                }
                catch (WebException webException)
                {
                    this.DiagnoseRequestErrors(webException, errorResultHandler);
                }
                finally
                {
                    this._mIsRequestRunning = false;
                }
            });
            
            newThread.Start();
        }
예제 #2
0
        /// <summary>
        /// Trata os erros enviados pela exception e disparada o delegate de erro
        /// </summary>
        /// <owner>Mnix-Victor</owner>
        private void DiagnoseRequestErrors(WebException exception, ErrorResultHandler errorResultHandler)
        {
            string errorOutput = String.Empty;
            WebResponse response = exception.Response;

            if (response != null)
            {
                StreamReader errorStreamReader = new StreamReader(exception.Response.GetResponseStream());
                errorOutput = errorStreamReader.ReadToEnd();
            }

            errorResultHandler.Invoke(this, exception, errorOutput);
        }