/// <summary> /// Sends an HTTP get request to cluster http gateway and deserializes the result. /// </summary> /// <typeparam name="T">The type of the object in List returned as response payload.</typeparam> /// <param name="requestFunc">Func to create HttpRequest to send.</param> /// <param name="relativeUri">The relative URI.</param> /// <param name="deserializeFunc">Func to deserialize T.</param> /// <param name="requestId">Request Id for corelation</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>The payload of the GET response as List of T.</returns> /// <exception cref="ServiceFabricException">When the response is not a success.</exception> internal async Task <PagedData <T> > SendAsyncGetResponseAsPagedData <T>( Func <HttpRequestMessage> requestFunc, string relativeUri, Func <JsonReader, T> deserializeFunc, string requestId, CancellationToken cancellationToken) { var response = await this.SendAsyncHandleUnsuccessfulResponse(requestFunc, relativeUri, requestId, cancellationToken); var retValue = default(PagedData <T>); if (response.Content != null) { try { var contentStream = await response.Content.ReadAsStreamAsync(); using (var streamReader = new StreamReader(contentStream)) { using (var reader = new JsonTextReader(streamReader)) { retValue = PagedDataConverter <T> .Deserialize(reader, deserializeFunc); } } } catch (JsonReaderException) { ServiceFabricHttpClientEventSource.Current.WarningMessage($"{this.ClientId}:{requestId}", SR.ErrorInvalidJsonInResponse); } } return(retValue); }
/// <summary> /// Sends an HTTP get request to cluster http gateway and deserializes the result. /// </summary> /// <typeparam name="T">The type of the object in List returned as response payload.</typeparam> /// <param name="requestFunc">Func to create HttpRequest to send.</param> /// <param name="relativeUri">The relative URI.</param> /// <param name="deserializeFunc">Func to deserialize T.</param> /// <param name="requestId">Request Id for corelation</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>The payload of the GET response as List of T.</returns> /// <exception cref="ServiceFabricException">When the response is not a success.</exception> internal async Task <PagedData <T> > SendAsyncGetResponseAsPagedData <T>( Func <HttpRequestMessage> requestFunc, string relativeUri, Func <JsonReader, T> deserializeFunc, string requestId, CancellationToken cancellationToken) { // pick a random Uri from endpoints(if more than 1) to send request to. var endpoint = this.randomizedEndpoints.GetElement(); var requestUri = new Uri(endpoint, relativeUri); var clientRequestId = this.GetClientRequestIdWithCorrelation(requestId); var response = await this.SendAsyncHandleUnsuccessfulResponse(requestFunc, requestUri, clientRequestId, cancellationToken); var retValue = default(PagedData <T>); if (response != null && response.Content != null) { try { var contentStream = await response.Content.ReadAsStreamAsync(); using (var streamReader = new StreamReader(contentStream)) { using (var reader = new JsonTextReader(streamReader)) { retValue = PagedDataConverter <T> .Deserialize(reader, deserializeFunc); } } } catch (JsonReaderException ex) { ServiceFabricHttpClientEventSource.Current.WarningMessage($"{clientRequestId}", $"{SR.ErrorCanNotDeserializeResponseFromServer} JsonReaderException: {ex.ToString()}"); throw new ServiceFabricException(string.Format(SR.ErrorCanNotDeserializeResponseFromServer, response.StatusCode), ex); } } return(retValue); }