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); }