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)); } }
private void RunCallbacks(WebServiceClientResponse response) { foreach (var callback in mCallbacks) { var condition = callback.Item1(response); if (condition) { callback.Item2(response); } } }
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; }
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); }