private static HttpHandlerContext CalculateHandlerContext(GrpcChannelOptions channelOptions) { if (channelOptions.HttpHandler == null) { // No way to know what handler a HttpClient is using so assume custom. var type = channelOptions.HttpClient == null ? HttpHandlerType.SocketsHttpHandler : HttpHandlerType.Custom; return(new HttpHandlerContext(type)); } if (HttpRequestHelpers.HasHttpHandlerType(channelOptions.HttpHandler, "System.Net.Http.WinHttpHandler")) { return(new HttpHandlerContext(HttpHandlerType.WinHttpHandler)); } if (HttpRequestHelpers.HasHttpHandlerType(channelOptions.HttpHandler, "System.Net.Http.SocketsHttpHandler")) { HttpHandlerType type; TimeSpan? connectTimeout; #if NET5_0_OR_GREATER var socketsHttpHandler = HttpRequestHelpers.GetHttpHandlerType <SocketsHttpHandler>(channelOptions.HttpHandler) !; type = HttpHandlerType.SocketsHttpHandler; connectTimeout = socketsHttpHandler.ConnectTimeout; // Check if the SocketsHttpHandler is being shared by channels. // It has already been setup by another channel (i.e. ConnectCallback is set) then // additional channels can use advanced connectivity features. if (!BalancerHttpHandler.IsSocketsHttpHandlerSetup(socketsHttpHandler)) { // Someone has already configured the handler callback. // This channel can't support advanced connectivity features. if (socketsHttpHandler.ConnectCallback != null) { type = HttpHandlerType.Custom; connectTimeout = null; } } #else type = HttpHandlerType.SocketsHttpHandler; connectTimeout = null; #endif return(new HttpHandlerContext(type, connectTimeout)); } if (HttpRequestHelpers.GetHttpHandlerType <HttpClientHandler>(channelOptions.HttpHandler) != null) { return(new HttpHandlerContext(HttpHandlerType.HttpClientHandler)); } return(new HttpHandlerContext(HttpHandlerType.Custom)); }
public BalancerHttpHandler(HttpMessageHandler innerHandler, ConnectionManager manager) : base(innerHandler) { _manager = manager; #if NET5_0_OR_GREATER var socketsHttpHandler = HttpRequestHelpers.GetHttpHandlerType <SocketsHttpHandler>(innerHandler); if (socketsHttpHandler != null) { socketsHttpHandler.ConnectCallback = OnConnect; } #endif }
public BalancerHttpHandler(HttpMessageHandler innerHandler, HttpHandlerType httpHandlerType, ConnectionManager manager) : base(innerHandler) { _manager = manager; #if NET5_0_OR_GREATER if (httpHandlerType == HttpHandlerType.SocketsHttpHandler) { var socketsHttpHandler = HttpRequestHelpers.GetHttpHandlerType <SocketsHttpHandler>(innerHandler); CompatibilityHelpers.Assert(socketsHttpHandler != null, "Should have handler with this handler type."); socketsHttpHandler.ConnectCallback = OnConnect; } #endif }