diff --git a/.pubnub.yml b/.pubnub.yml index 3073fbeb0..09e7972dd 100644 --- a/.pubnub.yml +++ b/.pubnub.yml @@ -1,8 +1,13 @@ name: c-sharp -version: "7.3.5" +version: "7.3.6" schema: 1 scm: github.com/pubnub/c-sharp changelog: + - date: 2025-04-03 + version: v7.3.6 + changes: + - type: bug + text: "Reafctor: Removed excess logging from transport module. Removed redundant logging from transport layer and added thread id information for tracking http request." - date: 2025-03-31 version: v7.3.5 changes: @@ -872,7 +877,7 @@ features: - QUERY-PARAM supported-platforms: - - version: Pubnub 'C#' 7.3.5 + version: Pubnub 'C#' 7.3.6 platforms: - Windows 10 and up - Windows Server 2008 and up @@ -883,7 +888,7 @@ supported-platforms: - .Net Framework 4.6.1+ - .Net Framework 6.0 - - version: PubnubPCL 'C#' 7.3.5 + version: PubnubPCL 'C#' 7.3.6 platforms: - Xamarin.Android - Xamarin.iOS @@ -903,7 +908,7 @@ supported-platforms: - .Net Core - .Net 6.0 - - version: PubnubUWP 'C#' 7.3.5 + version: PubnubUWP 'C#' 7.3.6 platforms: - Windows Phone 10 - Universal Windows Apps @@ -927,7 +932,7 @@ sdks: distribution-type: source distribution-repository: GitHub package-name: Pubnub - location: https://github.com/pubnub/c-sharp/releases/tag/v7.3.5.0 + location: https://github.com/pubnub/c-sharp/releases/tag/v7.3.6.0 requires: - name: ".Net" @@ -1210,7 +1215,7 @@ sdks: distribution-type: source distribution-repository: GitHub package-name: PubNubPCL - location: https://github.com/pubnub/c-sharp/releases/tag/v7.3.5.0 + location: https://github.com/pubnub/c-sharp/releases/tag/v7.3.6.0 requires: - name: ".Net Core" @@ -1569,7 +1574,7 @@ sdks: distribution-type: source distribution-repository: GitHub package-name: PubnubUWP - location: https://github.com/pubnub/c-sharp/releases/tag/v7.3.5.0 + location: https://github.com/pubnub/c-sharp/releases/tag/v7.3.6.0 requires: - name: "Universal Windows Platform Development" diff --git a/CHANGELOG b/CHANGELOG index 43cba939b..b4593e920 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +v7.3.6 - April 03 2025 +----------------------------- +- Fixed: reafctor: Removed excess logging from transport module. Removed redundant logging from transport layer and added thread id information for tracking http request. + v7.3.5 - March 31 2025 ----------------------------- - Fixed: standardize connection configuration to address inconsistent platform defaults leading to socket exhaustion under high load. diff --git a/src/Api/PubnubApi/EndPoint/Files/SendFileOperation.cs b/src/Api/PubnubApi/EndPoint/Files/SendFileOperation.cs index bc9bddbc4..38700d4bd 100644 --- a/src/Api/PubnubApi/EndPoint/Files/SendFileOperation.cs +++ b/src/Api/PubnubApi/EndPoint/Files/SendFileOperation.cs @@ -333,7 +333,7 @@ private async Task> ProcessFileUpload() }; transportRequest.Headers.Add("Content-Type", contentType); Tuple jsonAndStatusTuple; - var transportResponse = await PubnubInstance.transportMiddleware.Send(transportRequest: transportRequest); + var transportResponse = await PubnubInstance.transportMiddleware.Send(transportRequest: transportRequest).ConfigureAwait(false); if (transportResponse.StatusCode == 204 && transportResponse.Error == null) { var responseString = "{}"; diff --git a/src/Api/PubnubApi/EndPoint/PubSub/SubscribeManager.cs b/src/Api/PubnubApi/EndPoint/PubSub/SubscribeManager.cs index 8edb3af6d..b0a0a2971 100644 --- a/src/Api/PubnubApi/EndPoint/PubSub/SubscribeManager.cs +++ b/src/Api/PubnubApi/EndPoint/PubSub/SubscribeManager.cs @@ -35,7 +35,14 @@ public SubscribeManager(PNConfiguration pubnubConfig, IJsonPluggableLibrary json internal void MultiChannelUnSubscribeAll(PNOperationType type, Dictionary externalQueryParam) { //Retrieve the current channels already subscribed previously and terminate them - TerminateCurrentSubscriberRequest(); + if (OngoingSubscriptionCancellationTokenSources.TryGetValue(PubnubInstance.InstanceId, out var tokenSource)) + { + if (tokenSource != null) + { + IsCurrentSubscriptionCancellationRequested[PubnubInstance.InstanceId] = true; + TerminateCurrentSubscriberRequest(); + } + } string[] currentChannels = SubscriptionChannels.ContainsKey(PubnubInstance.InstanceId) ? SubscriptionChannels[PubnubInstance.InstanceId].Keys?.ToArray() ?? [] : []; @@ -53,13 +60,18 @@ internal void MultiChannelUnSubscribeAll(PNOperationType type, Dictionary { - SubscriptionChannels[PubnubInstance.InstanceId]?.Clear(); - SubscriptionChannelGroups[PubnubInstance.InstanceId]?.Clear(); + try + { + SubscriptionChannels[PubnubInstance.InstanceId]?.Clear(); + SubscriptionChannelGroups[PubnubInstance.InstanceId]?.Clear(); + } + catch (Exception e) + { + logger?.Debug($"No subscription found.{e.Message}"); + } }); } - - SubscriptionChannels[PubnubInstance.InstanceId]?.Clear(); - SubscriptionChannelGroups[PubnubInstance.InstanceId]?.Clear(); + TerminateCurrentSubscriberRequest(); TerminateReconnectTimer(); TerminatePresenceHeartbeatTimer(); @@ -294,7 +306,7 @@ internal void MultiChannelUnSubscribeInit(PNOperationType type, string channe catch (Exception ex) { logger?.Error( - $"At SubscribeManager.MultiChannelUnSubscribeInit() \n channel(s)={string.Join(",", validChannels.OrderBy(x => x).ToArray())} \n cg(s)={string.Join(",", validChannelGroups.OrderBy(x => x).ToArray())} \n Exception Details={ex}"); + $"SubscribeManager.MultiChannelUnSubscribeInit() \n channel(s)={string.Join(",", validChannels.OrderBy(x => x).ToArray())} \n cg(s)={string.Join(",", validChannelGroups.OrderBy(x => x).ToArray())} \n Exception Details={ex}"); } } @@ -302,7 +314,7 @@ internal void MultiChannelSubscribeInit(PNOperationType responseType, string[ string[] rawChannelGroups, Dictionary initialSubscribeUrlParams, Dictionary externalQueryParam) { - logger?.Debug("INITIAL SUBSCRIBE REQUEST getting executed through MultiChannelSubscribeInit"); + logger?.Trace("SubscribeManager: MultiChannelSubscribeInit() Invoked"); try { bool channelGroupSubscribeOnly = false; @@ -355,8 +367,7 @@ internal void MultiChannelSubscribeInit(PNOperationType responseType, string[ { channelGroupSubscribeOnly = true; } - - logger?.Debug($"MultiChannelSubscribeRequest with tt=0"); + MultiChannelSubscribeRequest(responseType, channels, channelGroups, 0, 0, false, initialSubscribeUrlParams, externalQueryParam); if (SubscribeHeartbeatCheckTimer != null) @@ -451,8 +462,7 @@ private void MultiChannelSubscribeRequest(PNOperationType type, string[] chan long lastTimetoken = LastSubscribeTimetoken.ContainsKey(PubnubInstance.InstanceId) ? LastSubscribeTimetoken[PubnubInstance.InstanceId] : 0; - logger?.Trace( - $"Building request for channel(s)={multiChannel}, channelgroup(s)={multiChannelGroup} with timetoken={lastTimetoken}"); + logger?.Trace($"Building request for channel(s)={multiChannel}, channelgroup(s)={multiChannelGroup} with timetoken={lastTimetoken}"); string channelsJsonState = BuildJsonUserState(channels, channelGroups, false); config[PubnubInstance.InstanceId].UserId = CurrentUserId[PubnubInstance.InstanceId]; // to make sure we capture if UUID is changed @@ -486,6 +496,7 @@ private void MultiChannelSubscribeRequest(PNOperationType type, string[] chan { networkConnection = true; var json = Encoding.UTF8.GetString(transportResponse.Content); + logger?.Debug($"SubscribeManager received response: {json}"); pubnubRequestState.GotJsonResponse = true; if (!string.IsNullOrEmpty(json)) { diff --git a/src/Api/PubnubApi/EndPoint/PubSub/SubscribeManager2.cs b/src/Api/PubnubApi/EndPoint/PubSub/SubscribeManager2.cs index 2b39c5e06..98babde1f 100644 --- a/src/Api/PubnubApi/EndPoint/PubSub/SubscribeManager2.cs +++ b/src/Api/PubnubApi/EndPoint/PubSub/SubscribeManager2.cs @@ -47,6 +47,7 @@ public async Task> HandshakeRequest(PNOperati if (transportResponse.StatusCode == Constants.HttpRequestSuccessStatusCode && transportResponse.Error == null && transportResponse.Content != null) { var responseJson = Encoding.UTF8.GetString(transportResponse.Content); + logger?.Debug($"Handshake Effect received json: {responseJson}"); PNStatus status = new PNStatus(null, PNOperationType.PNSubscribeOperation, PNStatusCategory.PNConnectedCategory, channels, channelGroups); HandshakeResponse handshakeResponse = jsonLibrary.DeserializeToObject(responseJson); return new Tuple(handshakeResponse, status); @@ -72,13 +73,13 @@ internal void HandshakeRequestCancellation() cancellationTokenSource.Dispose(); } else { - logger?.Trace($" SubscribeManager HandshakeRequestCancellation. No request to cancel."); + logger?.Trace($" SubscribeManager HandshakeRequestCancellation. No request to cancel."); } - logger?.Trace($"SubscribeManager HandshakeRequestCancellation. Done."); + logger?.Trace($"SubscribeManager HandshakeRequestCancellation. Done."); } catch (Exception ex) { - logger?.Trace($" SubscribeManager HandshakeRequestCancellation Exception: {ex}"); + logger?.Trace($" SubscribeManager HandshakeRequestCancellation Exception: {ex}"); } } internal async Task, PNStatus>> ReceiveRequest(PNOperationType responseType, string[] channels, string[] channelGroups, long? timetoken, int? region, Dictionary initialSubscribeUrlParams, Dictionary externalQueryParam) @@ -102,6 +103,7 @@ internal async Task, PNStatus>> ReceiveRequest receiveResponse = jsonLibrary.DeserializeToObject>(responseJson); return new Tuple, PNStatus>(receiveResponse, status); @@ -119,7 +121,7 @@ internal async Task, PNStatus>> ReceiveRequest MultiChannelSubscribeInit \n channel(s)={string.Join(",", channels.OrderBy(x => x).ToArray())} \n cg(s)={string.Join(",", channelGroups.OrderBy(x => x).ToArray())} \n Exception Details={ex}"); + $" Receiving effect exception for \n channel(s)={string.Join(",", channels.OrderBy(x => x).ToArray())} \n cg(s)={string.Join(",", channelGroups.OrderBy(x => x).ToArray())} \n Exception Details={ex}"); } return resp; } @@ -131,12 +133,12 @@ internal void ReceiveRequestCancellation() cancellationTokenSource.Cancel(); cancellationTokenSource.Dispose(); } else { - logger?.Trace($"SubscribeManager RequestCancellation. No request to cancel."); + logger?.Trace($"SubscribeManager RequestCancellation. No request to cancel."); } - logger?.Trace($"SubscribeManager ReceiveRequestCancellation. Done."); + logger?.Trace($"SubscribeManager ReceiveRequestCancellation. Done."); } catch (Exception ex) { - logger?.Trace($"SubscribeManager ReceiveRequestCancellation Exception: {ex}"); + logger?.Trace($"SubscribeManager ReceiveRequestCancellation Exception: {ex}"); } } diff --git a/src/Api/PubnubApi/EndPoint/PubSub/UnsubscribeOperation.cs b/src/Api/PubnubApi/EndPoint/PubSub/UnsubscribeOperation.cs index 0fee428fb..3b787a709 100644 --- a/src/Api/PubnubApi/EndPoint/PubSub/UnsubscribeOperation.cs +++ b/src/Api/PubnubApi/EndPoint/PubSub/UnsubscribeOperation.cs @@ -45,8 +45,7 @@ public IUnsubscribeOperation QueryParam(Dictionary customQuer public void Execute() { - logger?.Trace($"{GetType().Name} Execute invoked"); - logger?.Debug($"PUBNUB Unsubscribe request Execute() received channels = {string.Join(", ", subscribeChannelNames)}"); + logger?.Trace($"{GetType().Name} Execute invoked with channels = {string.Join(", ", subscribeChannelNames)}"); Unsubscribe(subscribeChannelNames, subscribeChannelGroupNames); } @@ -60,7 +59,7 @@ private void Unsubscribe(string[] channels, string[] channelGroups) string channel = (channels != null) ? string.Join(",", channels.OrderBy(x => x).ToArray()) : ""; string channelGroup = (channelGroups != null) ? string.Join(",", channelGroups.OrderBy(x => x).ToArray()) : ""; - logger?.Debug($"requested unsubscribe for channel(s)={channel}, cg(s)={channelGroup}"); + logger?.Debug($"{GetType().Name} requested unsubscribe for channel(s)={channel}, cg(s)={channelGroup}"); SubscribeManager manager = new SubscribeManager(config, jsonLibrary, unit, pubnubTokenManager, PubnubInstance); manager.CurrentPubnubInstance(PubnubInstance); diff --git a/src/Api/PubnubApi/EndPoint/StoragePlayback/MessageCountsOperation.cs b/src/Api/PubnubApi/EndPoint/StoragePlayback/MessageCountsOperation.cs index 121e1f851..3feac62bb 100644 --- a/src/Api/PubnubApi/EndPoint/StoragePlayback/MessageCountsOperation.cs +++ b/src/Api/PubnubApi/EndPoint/StoragePlayback/MessageCountsOperation.cs @@ -73,7 +73,7 @@ public async Task> ExecuteAsync() throw new MissingMemberException("Invalid Subscribe Key"); } - return await MessageCounts(this.channelNames, this.timetokens, this.queryParam); + return await MessageCounts(this.channelNames, this.timetokens, this.queryParam).ConfigureAwait(false); } internal void Retry() diff --git a/src/Api/PubnubApi/EventEngine/Core/Engine.cs b/src/Api/PubnubApi/EventEngine/Core/Engine.cs index fd21bb6f4..655b337da 100644 --- a/src/Api/PubnubApi/EventEngine/Core/Engine.cs +++ b/src/Api/PubnubApi/EventEngine/Core/Engine.cs @@ -50,7 +50,7 @@ private async void OnEvent(EventQueue q) transitioning = true; while (q.Count > 0) { - await Transition(q.Dequeue()); + await Transition(q.Dequeue()).ConfigureAwait(false); } transitioning = false; diff --git a/src/Api/PubnubApi/EventEngine/Core/EventQueue.cs b/src/Api/PubnubApi/EventEngine/Core/EventQueue.cs index 7cf2f397d..82c5c16e6 100644 --- a/src/Api/PubnubApi/EventEngine/Core/EventQueue.cs +++ b/src/Api/PubnubApi/EventEngine/Core/EventQueue.cs @@ -45,7 +45,7 @@ public async Task Loop(System.Func> function) { while (Count > 0) { - await function(Dequeue()); + await function(Dequeue()).ConfigureAwait(false); } } diff --git a/src/Api/PubnubApi/JsonDataParse/EventDeserializer.cs b/src/Api/PubnubApi/JsonDataParse/EventDeserializer.cs index 4f267b0d8..bca54458d 100644 --- a/src/Api/PubnubApi/JsonDataParse/EventDeserializer.cs +++ b/src/Api/PubnubApi/JsonDataParse/EventDeserializer.cs @@ -59,7 +59,10 @@ private PNPresenceEventResult DeserializePresenceEvent(IDictionary Pubnub - 7.3.5.0 + 7.3.6.0 PubNub C# .NET - Web Data Push API Pandu Masabathula PubNub @@ -22,7 +22,7 @@ http://pubnub.s3.amazonaws.com/2011/powered-by-pubnub/pubnub-icon-600x600.png true https://github.com/pubnub/c-sharp/ - Standardize connection configuration to address inconsistent platform defaults leading to socket exhaustion under high load. + Reafctor: Removed excess logging from transport module. Removed redundant logging from transport layer and added thread id information for tracking http request. Web Data Push Real-time Notifications ESB Message Broadcasting Distributed Computing PubNub is a Massively Scalable Web Push Service for Web and Mobile Games. This is a cloud-based service for broadcasting messages to thousands of web and mobile clients simultaneously diff --git a/src/Api/PubnubApi/Transport/HttpClientService.cs b/src/Api/PubnubApi/Transport/HttpClientService.cs index 7732cc6aa..3d84378cc 100644 --- a/src/Api/PubnubApi/Transport/HttpClientService.cs +++ b/src/Api/PubnubApi/Transport/HttpClientService.cs @@ -44,10 +44,11 @@ public async Task GetRequest(TransportRequest transportReques requestMessage.Headers.Add(kvp.Key, kvp.Value); } } - logger?.Debug($"HttpClient Service:Sending http request {transportRequest.RequestType} to {transportRequest.RequestUrl} \n Header {string.Join(", ", requestMessage.Headers.Select(kv => $"{kv.Key}: {kv.Value}"))}"); + logger?.Debug($"HttpClient Service: Task Id: {Task.CurrentId} Sending http request {transportRequest.RequestType} to {transportRequest.RequestUrl}" + + (requestMessage.Headers.Any() ? $"\n Header {string.Join(", ", requestMessage.Headers.Select(kv => $"{kv.Key}: {kv.Value}"))}" : "")); var httpResult = await httpClient.SendAsync(request: requestMessage, - cancellationToken: transportRequest.CancellationTokenSource.Token); - var responseContent = await httpResult.Content.ReadAsByteArrayAsync(); + cancellationToken: transportRequest.CancellationTokenSource.Token).ConfigureAwait(false); + var responseContent = await httpResult.Content.ReadAsByteArrayAsync().ConfigureAwait(false); transportResponse = new TransportResponse() { StatusCode = (int)httpResult.StatusCode, @@ -55,11 +56,11 @@ public async Task GetRequest(TransportRequest transportReques Headers = httpResult.Headers.ToDictionary(h => h.Key, h => h.Value), RequestUrl = httpResult.RequestMessage?.RequestUri?.AbsolutePath }; - logger?.Debug($"HttpClient Service:Received http response from server with status code {httpResult.StatusCode}, content-length: {transportResponse.Content.Length} bytes, for url \n{transportRequest.RequestUrl}"); + logger?.Debug($"HttpClient Service: Task Id: {Task.CurrentId} Received http response from server with status code {httpResult.StatusCode}, content-length: {transportResponse.Content.Length} bytes, for url \n{transportRequest.RequestUrl}"); } catch (TaskCanceledException taskCanceledException) { - logger?.Error($"HttpClient Service: Request is cancelled for url {transportRequest.RequestUrl}\n ex.InnerException: {taskCanceledException?.InnerException}\nex.inner.inner{taskCanceledException.InnerException?.InnerException}"); + logger?.Error($"HttpClient Service: Task Id: {Task.CurrentId} Request is cancelled for url {transportRequest.RequestUrl}"); transportResponse = new TransportResponse() { RequestUrl = transportRequest.RequestUrl, @@ -68,7 +69,7 @@ public async Task GetRequest(TransportRequest transportReques } catch (Exception e) { - logger?.Error($"HttpClient Service: Exception for http call url {transportRequest.RequestUrl}, exception message: {e.Message}, stacktrace: {e.StackTrace}"); + logger?.Error($"HttpClient Service: Task Id: {Task.CurrentId} Exception for http call url {transportRequest.RequestUrl}, exception message: {e.Message}, stacktrace: {e.StackTrace}"); transportResponse = new TransportResponse() { RequestUrl = transportRequest.RequestUrl, @@ -101,10 +102,10 @@ public async Task PostRequest(TransportRequest transportReque HttpRequestMessage requestMessage = new HttpRequestMessage(method: HttpMethod.Post, requestUri: transportRequest.RequestUrl) { Content = postData }; - logger?.Debug($"Sending http request {transportRequest.RequestType} to {transportRequest.RequestUrl} \n Header {string.Join(", ", requestMessage.Headers.Select(kv => $"{kv.Key}: {kv.Value}"))}"); + logger?.Debug($"HttpClient Service:Sending http request {transportRequest.RequestType} to {transportRequest.RequestUrl}" + (requestMessage.Headers.Any() ? $"\n Header {string.Join(", ", requestMessage.Headers.Select(kv => $"{kv.Key}: {kv.Value}"))}" : "")); var httpResult = await httpClient.SendAsync(request: requestMessage, - cancellationToken: transportRequest.CancellationTokenSource.Token); - var responseContent = await httpResult.Content.ReadAsByteArrayAsync(); + cancellationToken: transportRequest.CancellationTokenSource.Token).ConfigureAwait(false); + var responseContent = await httpResult.Content.ReadAsByteArrayAsync().ConfigureAwait(false); transportResponse = new TransportResponse() { StatusCode = (int)httpResult.StatusCode, @@ -162,10 +163,10 @@ public async Task PutRequest(TransportRequest transportReques requestMessage.Headers.Add(kvp.Key, kvp.Value); } } - logger?.Debug($"Sending http request {transportRequest.RequestType} to {transportRequest.RequestUrl} \n Header {string.Join(", ", requestMessage.Headers.Select(kv => $"{kv.Key}: {kv.Value}"))}"); + logger?.Debug($"HttpClient Service:Sending http request {transportRequest.RequestType} to {transportRequest.RequestUrl}" + (requestMessage.Headers.Any() ? $"\n Header {string.Join(", ", requestMessage.Headers.Select(kv => $"{kv.Key}: {kv.Value}"))}" : "")); var httpResult = await httpClient.SendAsync(request: requestMessage, - cancellationToken: transportRequest.CancellationTokenSource.Token); - var responseContent = await httpResult.Content.ReadAsByteArrayAsync(); + cancellationToken: transportRequest.CancellationTokenSource.Token).ConfigureAwait(false); + var responseContent = await httpResult.Content.ReadAsByteArrayAsync().ConfigureAwait(false); transportResponse = new TransportResponse() { StatusCode = (int)httpResult.StatusCode, @@ -208,10 +209,10 @@ public async Task DeleteRequest(TransportRequest transportReq requestMessage.Headers.Add(kvp.Key, kvp.Value); } } - logger?.Debug($"Sending http request {transportRequest.RequestType} to {transportRequest.RequestUrl} \n Header {string.Join(", ", requestMessage.Headers.Select(kv => $"{kv.Key}: {kv.Value}"))}"); + logger?.Debug($"HttpClient Service:Sending http request {transportRequest.RequestType} to {transportRequest.RequestUrl}" + (requestMessage.Headers.Any() ? $"\n Header {string.Join(", ", requestMessage.Headers.Select(kv => $"{kv.Key}: {kv.Value}"))}" : "")); var httpResult = await httpClient.SendAsync(request: requestMessage, - cancellationToken: transportRequest.CancellationTokenSource.Token); - var responseContent = await httpResult.Content.ReadAsByteArrayAsync(); + cancellationToken: transportRequest.CancellationTokenSource.Token).ConfigureAwait(false); + var responseContent = await httpResult.Content.ReadAsByteArrayAsync().ConfigureAwait(false); transportResponse = new TransportResponse() { StatusCode = (int)httpResult.StatusCode, @@ -270,10 +271,10 @@ public async Task PatchRequest(TransportRequest transportRequ requestMessage.Headers.Add(kvp.Key, $"\"{kvp.Value}\""); } } - logger?.Debug($"Sending http request {transportRequest.RequestType} to {transportRequest.RequestUrl} \n Header {string.Join(", ", requestMessage.Headers.Select(kv => $"{kv.Key}: {kv.Value}"))}"); + logger?.Debug($"HttpClient Service:Sending http request {transportRequest.RequestType} to {transportRequest.RequestUrl}" + (requestMessage.Headers.Any() ? $"\n Header {string.Join(", ", requestMessage.Headers.Select(kv => $"{kv.Key}: {kv.Value}"))}" : "")); var httpResult = await httpClient.SendAsync(request: requestMessage, - cancellationToken: transportRequest.CancellationTokenSource.Token); - var responseContent = await httpResult.Content.ReadAsByteArrayAsync(); + cancellationToken: transportRequest.CancellationTokenSource.Token).ConfigureAwait(false); + var responseContent = await httpResult.Content.ReadAsByteArrayAsync().ConfigureAwait(false); transportResponse = new TransportResponse() { StatusCode = (int)httpResult.StatusCode, diff --git a/src/Api/PubnubApiPCL/PubnubApiPCL.csproj b/src/Api/PubnubApiPCL/PubnubApiPCL.csproj index 38dae0c3e..ba7cf105e 100644 --- a/src/Api/PubnubApiPCL/PubnubApiPCL.csproj +++ b/src/Api/PubnubApiPCL/PubnubApiPCL.csproj @@ -14,7 +14,7 @@ PubnubPCL - 7.3.5.0 + 7.3.6.0 PubNub C# .NET - Web Data Push API Pandu Masabathula PubNub @@ -22,7 +22,7 @@ http://pubnub.s3.amazonaws.com/2011/powered-by-pubnub/pubnub-icon-600x600.png true https://github.com/pubnub/c-sharp/ - Standardize connection configuration to address inconsistent platform defaults leading to socket exhaustion under high load. + Reafctor: Removed excess logging from transport module. Removed redundant logging from transport layer and added thread id information for tracking http request. Web Data Push Real-time Notifications ESB Message Broadcasting Distributed Computing PubNub is a Massively Scalable Web Push Service for Web and Mobile Games. This is a cloud-based service for broadcasting messages to thousands of web and mobile clients simultaneously diff --git a/src/Api/PubnubApiUWP/PubnubApiUWP.csproj b/src/Api/PubnubApiUWP/PubnubApiUWP.csproj index 6bae344c8..47322c0d5 100644 --- a/src/Api/PubnubApiUWP/PubnubApiUWP.csproj +++ b/src/Api/PubnubApiUWP/PubnubApiUWP.csproj @@ -16,7 +16,7 @@ PubnubUWP - 7.3.5.0 + 7.3.6.0 PubNub C# .NET - Web Data Push API Pandu Masabathula PubNub @@ -24,7 +24,7 @@ http://pubnub.s3.amazonaws.com/2011/powered-by-pubnub/pubnub-icon-600x600.png true https://github.com/pubnub/c-sharp/ - Standardize connection configuration to address inconsistent platform defaults leading to socket exhaustion under high load. + Reafctor: Removed excess logging from transport module. Removed redundant logging from transport layer and added thread id information for tracking http request. Web Data Push Real-time Notifications ESB Message Broadcasting Distributed Computing PubNub is a Massively Scalable Web Push Service for Web and Mobile Games. This is a cloud-based service for broadcasting messages to thousands of web and mobile clients simultaneously diff --git a/src/Api/PubnubApiUnity/PubnubApiUnity.csproj b/src/Api/PubnubApiUnity/PubnubApiUnity.csproj index fe0ddcbf5..0a27a324d 100644 --- a/src/Api/PubnubApiUnity/PubnubApiUnity.csproj +++ b/src/Api/PubnubApiUnity/PubnubApiUnity.csproj @@ -14,7 +14,7 @@ PubnubApiUnity - 7.3.5.0 + 7.3.6.0 PubNub C# .NET - Web Data Push API Pandu Masabathula PubNub