/// <summary> /// Represents the worker method to send the callback registration request. /// </summary> /// <param name="windowsPhoneCallbackRegistrationRequest">The callback registration request that associates a callback URI and message with a subscription.</param> /// <returns>The response of the Windows Phone Callback Registration Request.</returns> public static WindowsPhoneCallbackRegistrationResponse RegisterCallback(WindowsPhoneCallbackRegistrationRequest windowsPhoneCallbackRegistrationRequest) { var windowsPhoneCallbackRegistrationResponse = new WindowsPhoneCallbackRegistrationResponse() { OperationStartUtcDateTime = DateTime.UtcNow, }; try { windowsPhoneCallbackRegistrationResponse.ValidationResults = Validator.Validate(windowsPhoneCallbackRegistrationRequest); if (windowsPhoneCallbackRegistrationResponse.ValidationResults.IsValidWithWarnings) { var windowsPhoneCallbackRegistrationWebRequest = (HttpWebRequest)WebRequest.Create(windowsPhoneCallbackRegistrationRequest.NotificationUri); windowsPhoneCallbackRegistrationWebRequest.Headers.Add("X-CallbackURI", windowsPhoneCallbackRegistrationRequest.CallbackUri); windowsPhoneCallbackRegistrationWebRequest.Method = "POST"; windowsPhoneCallbackRegistrationWebRequest.ContentType = "application/*"; windowsPhoneCallbackRegistrationWebRequest.ContentLength = windowsPhoneCallbackRegistrationRequest.CallbackMessage.Length; using (var notificationRequestStream = windowsPhoneCallbackRegistrationWebRequest.GetRequestStream()) { notificationRequestStream.Write(windowsPhoneCallbackRegistrationRequest.CallbackMessage, 0, windowsPhoneCallbackRegistrationRequest.CallbackMessage.Length); } using (var windowsPhoneCallbackRegistrationWebResponse = (HttpWebResponse)windowsPhoneCallbackRegistrationWebRequest.GetResponse()) { PushNotifier.SetCallbackRequestWebResponseValuesToResult(windowsPhoneCallbackRegistrationResponse, windowsPhoneCallbackRegistrationWebResponse); } } } catch (Exception exception) { windowsPhoneCallbackRegistrationResponse.OperationResult = ResultType.Failed; windowsPhoneCallbackRegistrationResponse.RawException = exception; var webException = exception as WebException; if (webException != null && webException.Response != null) { var httpWebResponse = webException.Response as HttpWebResponse; if (httpWebResponse != null) { PushNotifier.SetCallbackRequestWebResponseValuesToResult(windowsPhoneCallbackRegistrationResponse, httpWebResponse); } } } finally { windowsPhoneCallbackRegistrationResponse.OperationEndUtcDateTime = DateTime.UtcNow; } return(windowsPhoneCallbackRegistrationResponse); }
private static void AssertOperationResultValidationResultsMessageCodeOnWindowsPhoneCallbackRegistrationResponse(WindowsPhoneCallbackRegistrationResponse response, ResultType resultType, bool completelyValid, bool validWithWarnings, string code = null) { Assert.AreEqual(response.OperationResult, resultType); Assert.AreEqual(response.ValidationResults.IsCompletelyValid, completelyValid); Assert.AreEqual(response.ValidationResults.IsValidWithWarnings, validWithWarnings); if (!String.IsNullOrWhiteSpace(code)) { Assert.IsTrue(response.ValidationResults.Any(vr => vr.MessageCode == code)); } }
/// <summary> /// Sets the <see cref="HttpWebResponse"/> values of callback request into our <see cref="WindowsPhoneCallbackRegistrationResponse"/> object. /// </summary> /// <param name="windowsPhoneCallbackRegistrationResponse">The result of the Callback Request operation.</param> /// <param name="httpWebResponse">The web response of the Callback Request operation.</param> private static void SetCallbackRequestWebResponseValuesToResult(WindowsPhoneCallbackRegistrationResponse windowsPhoneCallbackRegistrationResponse, HttpWebResponse httpWebResponse) { windowsPhoneCallbackRegistrationResponse.HttpStatusCode = httpWebResponse.StatusCode; var subscriptionStatus = httpWebResponse.Headers["X-SubscriptionStatus"]; var deviceConnectionStatus = httpWebResponse.Headers["X-DeviceConnectionStatus"]; if (!String.IsNullOrWhiteSpace(subscriptionStatus)) { windowsPhoneCallbackRegistrationResponse.CallbackSubscriptionStatus = subscriptionStatus.ToEnum <SubscriptionStatus>(); } if (!String.IsNullOrWhiteSpace(deviceConnectionStatus)) { windowsPhoneCallbackRegistrationResponse.DeviceConnectionStatus = deviceConnectionStatus.ToEnum <DeviceConnectionStatus>(); } }