Esempio n. 1
0
        public IQueryHandler <TResult> BuildHandler <TResult>(IMartenSession session, Statement statement,
                                                              Statement currentStatement)
        {
            var selector = new SerializationSelector <T>(session.Serializer);

            return(LinqHandlerBuilder.BuildHandler <T, TResult>(selector, statement));
        }
        public static async Task <TReturn> MakeGetRequestAsync <TReturn>(
            Uri serviceName,
            ServicePartitionKey key,
            string endpointName,
            string requestPath,
            SerializationSelector selector,
            CancellationToken ct
            )
        {
            var servicePartitionClient = GetPartitionClient(serviceName, key, endpointName);
            HttpRequestMessage msg     = CreateRequestMessage(null, HttpVerb.GET, selector);

            return(await servicePartitionClient.InvokeWithRetryAsync <TReturn>(
                       async (client) =>
            {
                HttpResponseMessage response = null;
                try
                {
                    if (addresses.TryAdd(client.BaseAddress, true))
                    {
                        //https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
                        //but then http://byterot.blogspot.co.uk/2016/07/singleton-httpclient-dns.html
                        //so we do this ala https://github.com/NimaAra/Easy.Common/blob/master/Easy.Common/RestClient.cs
                        ServicePointManager.FindServicePoint(client.BaseAddress).ConnectionLeaseTimeout = 60 * 1000;
                    }

                    Uri newUri = new Uri(client.BaseAddress, requestPath.TrimStart('/'));

                    msg.RequestUri = newUri;

                    response = await httpClient.SendAsync(msg);

                    if (selector == SerializationSelector.JSON)
                    {
                        return await ReturnJsonResult <TReturn>(response);
                    }
                    else
                    {
                        return await ReturnPBufResult <TReturn>(response);
                    }
                }
                catch (Exception e)
                {
                    var x = e;
                    throw;
                }
            }, ct));
        }
        private static HttpRequestMessage CreateRequestMessage(object payload, HttpVerb verb, SerializationSelector selector)
        {
            HttpRequestMessage msg = new HttpRequestMessage();

            if (selector == SerializationSelector.PBUF)
            {
                msg.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-protobuf"));
            }
            else if (selector == SerializationSelector.JSON)
            {
                msg.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            }

            switch (verb)
            {
            case HttpVerb.GET:
                msg.Method = HttpMethod.Get;
                break;

            case HttpVerb.POST:
                msg.Method = HttpMethod.Post;
                break;
            }

            if (payload != null)
            {
                if (selector == SerializationSelector.JSON)
                {
                    msg.Content = new JsonContent(payload);
                }
                else if (selector == SerializationSelector.PBUF)
                {
                    msg.Content = new ProtoContent(payload);
                }
            }

            return(msg);
        }