コード例 #1
0
ファイル: RequestBuilder.cs プロジェクト: xyrus02/foundation
        public WebServiceClientResponse Send(CancellationToken cancellationToken = default(CancellationToken))
        {
            var ic = new RequestInterceptorContext(this);

            foreach (var interceptor in mInterceptors)
            {
                var task = interceptor(ic);
                try
                {
                    task.Wait(cancellationToken);
                }
                catch (OperationCanceledException)
                {
                    break;
                }
            }

            if (ic.InterceptorResult.HasError)
            {
                return(WebServiceClientResponse.FromError(new Exception(ic.InterceptorResult.ErrorDescription.NormalizeNull() ?? "An unknown error occured when preparing the request.")));
            }

            var request = mClient.CreateRequest(mVerb, mRequestPath, mParameters);

            SetAuthentication(request);
            SetHeaders(request);

            try
            {
                if (HasBody())
                {
                    if (mUseBodyString)
                    {
                        request.WriteBodyString(mBodyString);
                    }
                    else
                    {
                        request.WriteBody(mBody);
                    }
                }

                var result = request.Invoke(cancellationToken);
                if (cancellationToken.IsCancellationRequested)
                {
                    return(result);
                }

                RunCallbacks(result);

                return(result);
            }
            catch (Exception exception)
            {
                return(WebServiceClientResponse.FromError(exception));
            }
        }
コード例 #2
0
ファイル: RequestBuilder.cs プロジェクト: xyrus02/foundation
 private void RunCallbacks(WebServiceClientResponse response)
 {
     foreach (var callback in mCallbacks)
     {
         var condition = callback.Item1(response);
         if (condition)
         {
             callback.Item2(response);
         }
     }
 }
コード例 #3
0
		public static WebServiceClientResponse FromError([NotNull] Exception exception)
		{
			if (exception == null) throw new ArgumentNullException(nameof(exception));

			var instance = new WebServiceClientResponse();

			instance.HasError = true;
			instance.ErrorDescription = exception.GetOriginalMessage();

			return instance;
		}
コード例 #4
0
        private async Task <WebServiceClientResponse> FromResponseAsync(WebResponse response, IResult invokeResult, CancellationToken cancellationToken)
        {
            byte[] data;

            var responseStream = response.GetResponseStream();

            if (responseStream == null)
            {
                data = new byte[0];
            }
            else
            {
                using (responseStream)
                    using (var memoryStream = new MemoryStream())
                    {
                        await responseStream.CopyToAsync(memoryStream, 81920, cancellationToken);

                        if (cancellationToken.IsCancellationRequested)
                        {
                            return(new WebServiceClientResponse(new OperationCanceledException(), 900));
                        }

                        memoryStream.Seek(0, SeekOrigin.Begin);

                        data = memoryStream.ToArray();
                    }
            }

            var headers = new MemoryKeyValueStore <string>();

            foreach (var headerKey in response.Headers?.AllKeys ?? new string[0])
            {
                headers[headerKey] = response.Headers?[headerKey];
            }

            var http   = response as HttpWebResponse;
            var result = new WebServiceClientResponse(mConfiguration, mCommunicationStrategy, data, headers, invokeResult, (int)(http?.StatusCode ?? HttpStatusCode.OK));

            return(result);
        }