public async Task <WnsPushResult> PushAsync(WnsAuthentication authentication, string uri, XmlDocument doc, NotificationType type) { // create... var content = new StringContent(doc.OuterXml); content.Headers.ContentType.MediaType = "text/xml"; // if... if (type == NotificationType.Toast) { content.Headers.Add("X-WNS-Type", "wns/toast"); } else if (type == NotificationType.Tile) { content.Headers.Add("X-WNS-Type", "wns/tile"); } else if (type == NotificationType.Badge) { content.Headers.Add("X-WNS-Type", "wns/badge"); } else if (type == NotificationType.Raw) { content.Headers.Add("X-WNS-Type", "wns/badge"); } else { throw new NotSupportedException(string.Format("Cannot handle '{0}'.", type)); } // ok... var client = authentication.GetHttpClient(); var response = await client.PostAsync(uri, content); // what happened? if (response.StatusCode == HttpStatusCode.OK) { // what happened? var all = response.Headers.Where(v => v.Key == "X-WNS-NOTIFICATIONSTATUS").FirstOrDefault(); if (string.IsNullOrEmpty(all.Key)) { throw new InvalidOperationException("'X-WNS-NOTIFICATIONSTATUS' header not returned."); } return((WnsPushResult)Enum.Parse(typeof(WnsPushResult), all.Value.First(), true)); } else { throw await WnsAuthenticator.CreateRequestException("Failed to post notification.", response); } }
private async void buttonAuthenticate_Click(object sender, EventArgs e) { this.buttonAuthenticate.Enabled = false; try { SaveSettings(); this.Authentication = null; string sid = this.textSid.Text.Trim(); if (string.IsNullOrEmpty(sid)) { MessageBox.Show(this, "You must supply a SID."); return; } string secret = this.textSecret.Text.Trim(); if (string.IsNullOrEmpty(secret)) { MessageBox.Show(this, "You must supply a secret"); return; } // get the token... var authenticator = new WnsAuthenticator(); this.Authentication = await authenticator.AuthenticateAsync(sid, secret); // et... this.textToken.Text = this.Authentication.Token; } catch (Exception ex) { MessageBox.Show(this, ex.ToString()); } finally { this.buttonAuthenticate.Enabled = true; } }