public virtual async Task SendNotificationsAsync(PusherQueue queueToProcess) { bool success = false; try { await Task.Delay(TimeSpan.FromMinutes((double)queueToProcess.FailureCount)); this.IncrementInTransit(); PusherQueuePayload[] payloads = queueToProcess.GetPayloads(); HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(queueToProcess.DestinationUrl)); webRequest.PreAuthenticate = true; CertificateValidationManager.SetComponentId(webRequest, "RemoteNotification"); webRequest.ContentType = "text/plain"; webRequest.Method = "POST"; DateTime pushTime = DateTime.UtcNow; await RemoteNotificationRequester.SendRequest(webRequest, RemoteNotificationRequester.GeneratePayload(payloads), queueToProcess.DestinationUrl, payloads.Length); await RemoteNotificationRequester.ReceiveResponseAsync(webRequest); success = true; IEnumerable <NotificationPayloadBase> payloadsToBePushed = from p in payloads select p.Payload; NotificationStatisticsManager.Instance.NotificationPushed(queueToProcess.DestinationUrl, payloadsToBePushed, pushTime); } catch (WebException webException) { RemoteNotificationRequester.HandleWebException(webException, queueToProcess); } finally { queueToProcess.SendComplete(success); this.DecrementInTransit(); } }
private static void HandleWebException(WebException webException, PusherQueue queue) { OwaServerTraceLogger.AppendToLog(new PusherLogEvent(PusherEventType.PushFailed) { Destination = queue.DestinationUrl, HandledException = webException }); HttpWebResponse httpWebResponse = webException.Response as HttpWebResponse; if (httpWebResponse != null) { httpWebResponse.Close(); } }