public static WebServiceException ToWebServiceException(this ValidationResult validationResult, object requestDto, ValidationFeature feature) { var validationError = validationResult.ToException(); var errorResponse = DtoUtils.CreateErrorResponse(requestDto, validationError); if (feature?.ErrorResponseFilter != null) { errorResponse = feature.ErrorResponseFilter(validationResult, errorResponse); } var status = errorResponse.GetResponseStatus(); var to = new WebServiceException(status.ErrorCode, validationError) { StatusCode = 400, StatusDescription = status.ErrorCode, ResponseDto = errorResponse, }; return(to); }
public void ThrowWebServiceException <TResponse>(HttpResponseMessage httpRes, object request, string requestUri, object response) { if (log.IsDebugEnabled) { log.DebugFormat("Status Code : {0}", httpRes.StatusCode); log.DebugFormat("Status Description : {0}", httpRes.ReasonPhrase); } var serviceEx = new WebServiceException(httpRes.ReasonPhrase) { StatusCode = (int)httpRes.StatusCode, StatusDescription = httpRes.ReasonPhrase, ResponseHeaders = httpRes.Headers.ToWebHeaderCollection() }; try { var contentType = httpRes.GetContentType(); var bytes = GetResponseBytes(response); if (bytes != null) { if (string.IsNullOrEmpty(contentType) || contentType.MatchesContentType(ContentType)) { using (__requestAccess()) { var stream = MemoryStreamFactory.GetStream(bytes); serviceEx.ResponseBody = bytes.FromUtf8Bytes(); serviceEx.ResponseDto = JsonSerializer.DeserializeFromStream <TResponse>(stream); if (stream.CanRead) { stream.Dispose(); //alt ms throws when you dispose twice } } } else { serviceEx.ResponseBody = bytes.FromUtf8Bytes(); } } } catch (Exception innerEx) { // Oh, well, we tried throw new WebServiceException(httpRes.ReasonPhrase, innerEx) { StatusCode = (int)httpRes.StatusCode, StatusDescription = httpRes.ReasonPhrase, ResponseBody = serviceEx.ResponseBody }; } //Escape deserialize exception handling and throw here throw serviceEx; //var authEx = ex as AuthenticationException; //if (authEx != null) //{ // throw WebRequestUtils.CreateCustomException(requestUri, authEx); //} }
public static WebServiceException ToWebServiceException(this HttpError error) { var to = new WebServiceException(error.Message, error.InnerException) { StatusCode = error.Status, StatusDescription = error.StatusDescription, ResponseDto = error.Response, }; return to; }
private void HandleResponseError <TResponse>(Exception exception, AsyncState <TResponse> state) { var webEx = exception as WebException; if (PclExportClient.Instance.IsWebException(webEx)) { var errorResponse = (HttpWebResponse)webEx.Response; Log.Error(webEx); if (Log.IsDebugEnabled) { Log.DebugFormat("Status Code : {0}", errorResponse.StatusCode); Log.DebugFormat("Status Description : {0}", errorResponse.StatusDescription); } var serviceEx = new WebServiceException(errorResponse.StatusDescription) { StatusCode = (int)errorResponse.StatusCode, StatusDescription = errorResponse.StatusDescription, ResponseHeaders = errorResponse.Headers }; try { using (var stream = errorResponse.GetResponseStream()) { var bytes = stream.ReadFully(); serviceEx.ResponseBody = bytes.FromUtf8Bytes(); var errorResponseType = WebRequestUtils.GetErrorResponseDtoType <TResponse>(state.Request); if (stream.CanSeek) { PclExport.Instance.ResetStream(stream); serviceEx.ResponseDto = this.StreamDeserializer(errorResponseType, stream); } else //Android { using (var ms = MemoryStreamFactory.GetStream(bytes)) { serviceEx.ResponseDto = this.StreamDeserializer(errorResponseType, ms); } } state.HandleError(serviceEx.ResponseDto, serviceEx); } } catch (Exception innerEx) { // Oh, well, we tried Log.Debug(string.Format("WebException Reading Response Error: {0}", innerEx.Message), innerEx); state.HandleError(default(TResponse), new WebServiceException(errorResponse.StatusDescription, innerEx) { StatusCode = (int)errorResponse.StatusCode, StatusDescription = errorResponse.StatusDescription, ResponseHeaders = errorResponse.Headers }); } return; } var authEx = exception as AuthenticationException; if (authEx != null) { var customEx = WebRequestUtils.CreateCustomException(state.Url, authEx); Log.Debug(string.Format("AuthenticationException: {0}", customEx.Message), customEx); state.HandleError(default(TResponse), authEx); } Log.Debug(string.Format("Exception Reading Response Error: {0}", exception.Message), exception); state.HandleError(default(TResponse), exception); CancelAsyncFn = null; }
private Exception HandleResponseError <TResponse>(Exception exception, string url, object request) { var webEx = exception as WebException; if (PclExportClient.Instance.IsWebException(webEx)) { var errorResponse = (HttpWebResponse)webEx.Response; Log.Error(webEx); if (Log.IsDebugEnabled) { Log.Debug($"Status Code : {errorResponse.StatusCode}"); Log.Debug($"Status Description : {errorResponse.StatusDescription}"); } var serviceEx = new WebServiceException(errorResponse.StatusDescription) { StatusCode = (int)errorResponse.StatusCode, StatusDescription = errorResponse.StatusDescription, ResponseHeaders = errorResponse.Headers }; try { using var stream = errorResponse.ResponseStream(); var bytes = stream.ReadFully(); serviceEx.ResponseBody = bytes.FromUtf8Bytes(); var errorResponseType = WebRequestUtils.GetErrorResponseDtoType <TResponse>(request); if (stream.CanSeek) { PclExport.Instance.ResetStream(stream); serviceEx.ResponseDto = this.StreamDeserializer(errorResponseType, stream); } else //Android { using var ms = MemoryStreamFactory.GetStream(bytes); serviceEx.ResponseDto = this.StreamDeserializer(errorResponseType, ms); } return(serviceEx); } catch (Exception innerEx) { // Oh, well, we tried Log.Debug($"WebException Reading Response Error: {innerEx.Message}", innerEx); return(new WebServiceException(errorResponse.StatusDescription, innerEx) { StatusCode = (int)errorResponse.StatusCode, StatusDescription = errorResponse.StatusDescription, ResponseHeaders = errorResponse.Headers }); } } if (exception is AuthenticationException authEx) { var customEx = WebRequestUtils.CreateCustomException(url, authEx); Log.Debug($"AuthenticationException: {customEx.Message}", customEx); return(authEx); } Log.Debug($"Exception Reading Response Error: {exception.Message}", exception); return(exception); }
private void HandleResponseError <TResponse>(Exception exception, AsyncState <TResponse> state) { var webEx = exception as WebException; if (webEx.IsWebException()) { var errorResponse = ((HttpWebResponse)webEx.Response); Log.Error(webEx); Log.DebugFormat("Status Code : {0}", errorResponse.StatusCode); Log.DebugFormat("Status Description : {0}", errorResponse.StatusDescription); var serviceEx = new WebServiceException(errorResponse.StatusDescription) { StatusCode = (int)errorResponse.StatusCode, StatusDescription = errorResponse.StatusDescription, }; try { using (var stream = errorResponse.GetResponseStream()) { //Uncomment to Debug exceptions: //var strResponse = new StreamReader(stream).ReadToEnd(); //Console.WriteLine("Response: " + strResponse); //stream.Position = 0; serviceEx.ResponseBody = stream.ReadFully().FromUtf8Bytes(); PclExport.Instance.ResetStream(stream); serviceEx.ResponseDto = this.StreamDeserializer(typeof(TResponse), stream); state.HandleError((TResponse)serviceEx.ResponseDto, serviceEx); } } catch (Exception innerEx) { // Oh, well, we tried Log.Debug(string.Format("WebException Reading Response Error: {0}", innerEx.Message), innerEx); state.HandleError(default(TResponse), new WebServiceException(errorResponse.StatusDescription, innerEx) { StatusCode = (int)errorResponse.StatusCode, StatusDescription = errorResponse.StatusDescription, }); } return; } var authEx = exception as AuthenticationException; if (authEx != null) { var customEx = WebRequestUtils.CreateCustomException(state.Url, authEx); Log.Debug(string.Format("AuthenticationException: {0}", customEx.Message), customEx); state.HandleError(default(TResponse), authEx); } Log.Debug(string.Format("Exception Reading Response Error: {0}", exception.Message), exception); state.HandleError(default(TResponse), exception); CancelAsyncFn = null; }