コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }