private static void AssertOperationResultValidationResultsMessageCodeOnPushNotificationSendResult(PushNotificationSendResult result, ResultType resultType, bool completelyValid, bool validWithWarnings, string code = null) { Assert.AreEqual(result.OperationResult, resultType); Assert.AreEqual(result.ValidationResults.IsCompletelyValid, completelyValid); Assert.AreEqual(result.ValidationResults.IsValidWithWarnings, validWithWarnings); if (!String.IsNullOrWhiteSpace(code)) { Assert.IsTrue(result.ValidationResults.Any(vr => vr.MessageCode == code)); } }
/// <summary> /// Sets the <see cref="HttpWebResponse"/> values of notification into our <see cref="PushNotificationSendResult"/> object. /// </summary> /// <param name="pushNotificationSendResult">The result of the Notification Send operation.</param> /// <param name="httpWebResponse">The web response of the Notification Send operation.</param> private static void SetNotificationWebResponseValuesToResult(PushNotificationSendResult pushNotificationSendResult, HttpWebResponse httpWebResponse) { pushNotificationSendResult.HttpStatusCode = httpWebResponse.StatusCode; var pushNotificationStatus = httpWebResponse.Headers["X-NotificationStatus"]; var pushNotificationSubscriptionStatus = httpWebResponse.Headers["X-SubscriptionStatus"]; var deviceConnectionStatus = httpWebResponse.Headers["X-DeviceConnectionStatus"]; if (!String.IsNullOrWhiteSpace(pushNotificationStatus)) { pushNotificationSendResult.PushNotificationStatus = pushNotificationStatus.ToEnum <PushNotificationStatus>(); } if (!String.IsNullOrWhiteSpace(pushNotificationSubscriptionStatus)) { pushNotificationSendResult.PushNotificationSubscriptionStatus = pushNotificationSubscriptionStatus.ToEnum <SubscriptionStatus>(); } if (!String.IsNullOrWhiteSpace(deviceConnectionStatus)) { pushNotificationSendResult.DeviceConnectionStatus = deviceConnectionStatus.ToEnum <DeviceConnectionStatus>(); } }
private void ResponseComments_Test(HttpStatusCode httpStatusCode, PushNotificationStatus pushNotificationStatus, DeviceConnectionStatus deviceConnectionStatus, SubscriptionStatus subscriptionStatus, string value) { var result = new PushNotificationSendResult() { HttpStatusCode = httpStatusCode, PushNotificationStatus = pushNotificationStatus, DeviceConnectionStatus = deviceConnectionStatus, PushNotificationSubscriptionStatus = subscriptionStatus, }; Assert.AreEqual(result.Comments, value); }
/// <summary> /// Represents the worker method to send the actual notification message. /// </summary> /// <typeparam name="T">Type of <see cref="PushNotificationMessage"/>.</typeparam> /// <param name="pushNotificationMessage">The notification message to send.</param> /// <returns>The response of the Notification Send operation.</returns> public static PushNotificationSendResult SendPushNotificationMessage <T>(T pushNotificationMessage) where T : PushNotificationMessage { var pushNotificationSendResult = new PushNotificationSendResult() { OperationStartUtcDateTime = DateTime.UtcNow, }; try { if (pushNotificationMessage != null) { pushNotificationSendResult.DeviceType = pushNotificationMessage.DeviceType; pushNotificationSendResult.PushNotificationType = pushNotificationMessage.PushNotificationType; } pushNotificationSendResult.ValidationResults = Validator.Validate(pushNotificationMessage); if (pushNotificationSendResult.ValidationResults.IsValidWithWarnings) { switch (pushNotificationMessage.DeviceType) { case DeviceType.WindowsPhone7_1: case DeviceType.WindowsPhone7_0: var windowsPhonePushNotificationMessage = pushNotificationMessage as WindowsPhonePushNotificationMessage; var pushNotificationWebRequest = (HttpWebRequest)WebRequest.Create(windowsPhonePushNotificationMessage.NotificationUri); pushNotificationWebRequest.Method = "POST"; pushNotificationWebRequest.ContentType = "text/xml"; var messageId = Guid.NewGuid(); pushNotificationSendResult.MessageId = messageId; pushNotificationWebRequest.Headers.Add("X-MessageID", messageId.ToString()); var windowsPhoneTargetHeader = windowsPhonePushNotificationMessage.PushNotificationType.ToWindowsPhoneTarget(); pushNotificationWebRequest.Headers["X-WindowsPhone-Target"] = windowsPhoneTargetHeader; var notificationClass = windowsPhonePushNotificationMessage.MessagePriority.ToNotificationClass(windowsPhonePushNotificationMessage.PushNotificationType); pushNotificationWebRequest.Headers.Add("X-NotificationClass", notificationClass); var notificationPayload = windowsPhonePushNotificationMessage.CreatePayload(); pushNotificationWebRequest.ContentLength = notificationPayload.Length; if (windowsPhonePushNotificationMessage.AuthenticationSettings != null && windowsPhonePushNotificationMessage.AuthenticationSettings.EnableAuthentication) { pushNotificationWebRequest.ClientCertificates.Add(windowsPhonePushNotificationMessage.AuthenticationSettings.X509Certificate); } using (var notificationRequestStream = pushNotificationWebRequest.GetRequestStream()) { notificationRequestStream.Write(notificationPayload, 0, notificationPayload.Length); } using (var pushNotificationWebResponse = (HttpWebResponse)pushNotificationWebRequest.GetResponse()) { PushNotifier.SetNotificationWebResponseValuesToResult(pushNotificationSendResult, pushNotificationWebResponse); } break; } } } catch (Exception exception) { pushNotificationSendResult.OperationResult = ResultType.Failed; pushNotificationSendResult.RawException = exception; var webException = exception as WebException; if (webException != null && webException.Response != null) { var httpWebResponse = webException.Response as HttpWebResponse; if (httpWebResponse != null) { PushNotifier.SetNotificationWebResponseValuesToResult(pushNotificationSendResult, httpWebResponse); } } } finally { pushNotificationSendResult.OperationEndUtcDateTime = DateTime.UtcNow; } return(pushNotificationSendResult); }