diff options
-rw-r--r-- | samples/DotNetOpenAuth.ApplicationBlock/TwitterConsumer.cs | 2 | ||||
-rw-r--r-- | samples/OAuthConsumer/GoogleAddressBook.aspx | 2 | ||||
-rw-r--r-- | samples/OAuthConsumer/GoogleAddressBook.aspx.cs | 10 | ||||
-rw-r--r-- | samples/OAuthConsumer/GoogleApps2Legged.aspx | 2 | ||||
-rw-r--r-- | samples/OAuthConsumer/GoogleApps2Legged.aspx.cs | 9 | ||||
-rw-r--r-- | samples/OAuthConsumer/SampleWcf.aspx | 2 | ||||
-rw-r--r-- | samples/OAuthConsumer/SampleWcf.aspx.cs | 31 | ||||
-rw-r--r-- | samples/OAuthConsumer/SignInWithTwitter.aspx | 2 | ||||
-rw-r--r-- | samples/OAuthConsumer/SignInWithTwitter.aspx.cs | 15 | ||||
-rw-r--r-- | samples/OAuthConsumer/Twitter.aspx | 2 | ||||
-rw-r--r-- | samples/OAuthConsumer/Twitter.aspx.cs | 21 | ||||
-rw-r--r-- | samples/OAuthConsumer/Yammer.aspx.cs | 11 | ||||
-rw-r--r-- | samples/OAuthServiceProvider/Members/Authorize.aspx | 2 | ||||
-rw-r--r-- | samples/OAuthServiceProvider/Members/Authorize.aspx.cs | 7 | ||||
-rw-r--r-- | samples/OAuthServiceProvider/OAuthServiceProvider.csproj | 2 | ||||
-rw-r--r-- | samples/OAuthServiceProvider/packages.config | 1 |
16 files changed, 71 insertions, 50 deletions
diff --git a/samples/DotNetOpenAuth.ApplicationBlock/TwitterConsumer.cs b/samples/DotNetOpenAuth.ApplicationBlock/TwitterConsumer.cs index 9cbedb6..455ccf3 100644 --- a/samples/DotNetOpenAuth.ApplicationBlock/TwitterConsumer.cs +++ b/samples/DotNetOpenAuth.ApplicationBlock/TwitterConsumer.cs @@ -216,7 +216,7 @@ namespace DotNetOpenAuth.ApplicationBlock { /// <c>return StartSignInWithTwitter().<see cref="MessagingUtilities.AsActionResult">AsActionResult()</see></c> /// to actually perform the redirect. /// </remarks> - public static async Task<HttpResponseMessage> StartSignInWithTwitterAsync(bool forceNewLogin, CancellationToken cancellationToken) { + public static async Task<HttpResponseMessage> StartSignInWithTwitterAsync(bool forceNewLogin = false, CancellationToken cancellationToken = default(CancellationToken)) { var redirectParameters = new Dictionary<string, string>(); if (forceNewLogin) { redirectParameters["force_login"] = "true"; diff --git a/samples/OAuthConsumer/GoogleAddressBook.aspx b/samples/OAuthConsumer/GoogleAddressBook.aspx index 19fb505..b4d6a01 100644 --- a/samples/OAuthConsumer/GoogleAddressBook.aspx +++ b/samples/OAuthConsumer/GoogleAddressBook.aspx @@ -1,4 +1,4 @@ -<%@ Page Title="Gmail address book demo" Language="C#" MasterPageFile="~/MasterPage.master" +<%@ Page Title="Gmail address book demo" Language="C#" MasterPageFile="~/MasterPage.master" Async="true" AutoEventWireup="true" Inherits="OAuthConsumer.GoogleAddressBook" Codebehind="GoogleAddressBook.aspx.cs" %> <asp:Content ID="Content2" ContentPlaceHolderID="Body" runat="Server"> diff --git a/samples/OAuthConsumer/GoogleAddressBook.aspx.cs b/samples/OAuthConsumer/GoogleAddressBook.aspx.cs index ddca7e4..8a2a816 100644 --- a/samples/OAuthConsumer/GoogleAddressBook.aspx.cs +++ b/samples/OAuthConsumer/GoogleAddressBook.aspx.cs @@ -35,7 +35,7 @@ } } - protected void Page_Load(object sender, EventArgs e) { + protected async void Page_Load(object sender, EventArgs e) { if (this.TokenManager != null) { this.MultiView1.ActiveViewIndex = 1; @@ -43,21 +43,21 @@ var google = new WebConsumer(GoogleConsumer.ServiceDescription, this.TokenManager); // Is Google calling back with authorization? - var accessTokenResponse = google.ProcessUserAuthorization(); + var accessTokenResponse = await google.ProcessUserAuthorizationAsync(new HttpRequestWrapper(Request), Response.ClientDisconnectedToken); if (accessTokenResponse != null) { this.AccessToken = accessTokenResponse.AccessToken; } else if (this.AccessToken == null) { // If we don't yet have access, immediately request it. - GoogleConsumer.RequestAuthorization(google, GoogleConsumer.Applications.Contacts); + await GoogleConsumer.RequestAuthorizationAsync(google, GoogleConsumer.Applications.Contacts); } } } } - protected void getAddressBookButton_Click(object sender, EventArgs e) { + protected async void getAddressBookButton_Click(object sender, EventArgs e) { var google = new WebConsumer(GoogleConsumer.ServiceDescription, this.TokenManager); - XDocument contactsDocument = GoogleConsumer.GetContacts(google, this.AccessToken, 5, 1); + XDocument contactsDocument = await GoogleConsumer.GetContactsAsync(google, this.AccessToken, 5, 1, Response.ClientDisconnectedToken); var contacts = from entry in contactsDocument.Root.Elements(XName.Get("entry", "http://www.w3.org/2005/Atom")) select new { Name = entry.Element(XName.Get("title", "http://www.w3.org/2005/Atom")).Value, Email = entry.Element(XName.Get("email", "http://schemas.google.com/g/2005")).Attribute("address").Value }; StringBuilder tableBuilder = new StringBuilder(); diff --git a/samples/OAuthConsumer/GoogleApps2Legged.aspx b/samples/OAuthConsumer/GoogleApps2Legged.aspx index cd9d9a1..44f0ce2 100644 --- a/samples/OAuthConsumer/GoogleApps2Legged.aspx +++ b/samples/OAuthConsumer/GoogleApps2Legged.aspx @@ -1,4 +1,4 @@ -<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/MasterPage.master"CodeBehind="GoogleApps2Legged.aspx.cs" Inherits="OAuthConsumer.GoogleApps2Legged" %> +<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/MasterPage.master"CodeBehind="GoogleApps2Legged.aspx.cs" Inherits="OAuthConsumer.GoogleApps2Legged" Async="true" %> <asp:Content ID="Content2" ContentPlaceHolderID="Body" runat="Server"> <asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0"> diff --git a/samples/OAuthConsumer/GoogleApps2Legged.aspx.cs b/samples/OAuthConsumer/GoogleApps2Legged.aspx.cs index afb156b..2dfa8a2 100644 --- a/samples/OAuthConsumer/GoogleApps2Legged.aspx.cs +++ b/samples/OAuthConsumer/GoogleApps2Legged.aspx.cs @@ -28,12 +28,15 @@ } } - protected void Page_Load(object sender, EventArgs e) { + protected async void Page_Load(object sender, EventArgs e) { var google = new WebConsumer(GoogleConsumer.ServiceDescription, this.TokenManager); - string accessToken = google.RequestNewClientAccount(); + string accessToken = await google.RequestNewClientAccountAsync(cancellationToken: Response.ClientDisconnectedToken); ////string tokenSecret = google.TokenManager.GetTokenSecret(accessToken); MessageReceivingEndpoint ep = null; // set up your authorized call here. - google.PrepareAuthorizedRequestAndSend(ep, accessToken); + var request = await google.PrepareAuthorizedRequestAsync(ep, accessToken, Response.ClientDisconnectedToken); + using (var httpClient = google.Channel.HostFactories.CreateHttpClient()) { + await httpClient.SendAsync(request); + } } } }
\ No newline at end of file diff --git a/samples/OAuthConsumer/SampleWcf.aspx b/samples/OAuthConsumer/SampleWcf.aspx index fb318ce..a44ffa4 100644 --- a/samples/OAuthConsumer/SampleWcf.aspx +++ b/samples/OAuthConsumer/SampleWcf.aspx @@ -1,4 +1,4 @@ -<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" Inherits="OAuthConsumer.SampleWcf" Codebehind="SampleWcf.aspx.cs" %> +<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" Inherits="OAuthConsumer.SampleWcf" Codebehind="SampleWcf.aspx.cs" Async="true" %> <asp:Content ID="Content2" ContentPlaceHolderID="Body" runat="Server"> <fieldset title="Authorization"> diff --git a/samples/OAuthConsumer/SampleWcf.aspx.cs b/samples/OAuthConsumer/SampleWcf.aspx.cs index d56a161..d0f69f8 100644 --- a/samples/OAuthConsumer/SampleWcf.aspx.cs +++ b/samples/OAuthConsumer/SampleWcf.aspx.cs @@ -7,6 +7,8 @@ using System.ServiceModel; using System.ServiceModel.Channels; using System.ServiceModel.Security; + using System.Threading.Tasks; + using System.Web; using System.Web.UI.WebControls; using DotNetOpenAuth; using DotNetOpenAuth.ApplicationBlock; @@ -19,11 +21,11 @@ /// Sample consumer of our Service Provider sample's WCF service. /// </summary> public partial class SampleWcf : System.Web.UI.Page { - protected void Page_Load(object sender, EventArgs e) { + protected async void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Session["WcfTokenManager"] != null) { WebConsumer consumer = this.CreateConsumer(); - var accessTokenMessage = consumer.ProcessUserAuthorization(); + var accessTokenMessage = await consumer.ProcessUserAuthorizationAsync(new HttpRequestWrapper(Request), Response.ClientDisconnectedToken); if (accessTokenMessage != null) { Session["WcfAccessToken"] = accessTokenMessage.AccessToken; this.authorizationLabel.Text = "Authorized! Access token: " + accessTokenMessage.AccessToken; @@ -32,7 +34,7 @@ } } - protected void getAuthorizationButton_Click(object sender, EventArgs e) { + protected async void getAuthorizationButton_Click(object sender, EventArgs e) { WebConsumer consumer = this.CreateConsumer(); UriBuilder callback = new UriBuilder(Request.Url); callback.Query = null; @@ -43,37 +45,38 @@ var requestParams = new Dictionary<string, string> { { "scope", scope }, }; - var response = consumer.PrepareRequestUserAuthorization(callback.Uri, requestParams, null); - consumer.Channel.Send(response); + var response = await consumer.PrepareRequestUserAuthorizationAsync(callback.Uri, requestParams, null, Response.ClientDisconnectedToken); + var responseMessage = await consumer.Channel.PrepareResponseAsync(response, Response.ClientDisconnectedToken); + await responseMessage.SendAsync(new HttpResponseWrapper(Response), Response.ClientDisconnectedToken); } - protected void getNameButton_Click(object sender, EventArgs e) { + protected async void getNameButton_Click(object sender, EventArgs e) { try { - this.nameLabel.Text = this.CallService(client => client.GetName()); + this.nameLabel.Text = await this.CallServiceAsync(client => client.GetName()); } catch (SecurityAccessDeniedException) { this.nameLabel.Text = "Access denied!"; } } - protected void getAgeButton_Click(object sender, EventArgs e) { + protected async void getAgeButton_Click(object sender, EventArgs e) { try { - int? age = this.CallService(client => client.GetAge()); + int? age = await this.CallServiceAsync(client => client.GetAge()); this.ageLabel.Text = age.HasValue ? age.Value.ToString(CultureInfo.CurrentCulture) : "not available"; } catch (SecurityAccessDeniedException) { this.ageLabel.Text = "Access denied!"; } } - protected void getFavoriteSites_Click(object sender, EventArgs e) { + protected async void getFavoriteSites_Click(object sender, EventArgs e) { try { - string[] favoriteSites = this.CallService(client => client.GetFavoriteSites()); + string[] favoriteSites = await this.CallServiceAsync(client => client.GetFavoriteSites()); this.favoriteSitesLabel.Text = string.Join(", ", favoriteSites); } catch (SecurityAccessDeniedException) { this.favoriteSitesLabel.Text = "Access denied!"; } } - private T CallService<T>(Func<DataApiClient, T> predicate) { + private async Task<T> CallServiceAsync<T>(Func<DataApiClient, T> predicate) { DataApiClient client = new DataApiClient(); var serviceEndpoint = new MessageReceivingEndpoint(client.Endpoint.Address.Uri, HttpDeliveryMethods.AuthorizationHeaderRequest | HttpDeliveryMethods.PostRequest); var accessToken = Session["WcfAccessToken"] as string; @@ -81,10 +84,10 @@ throw new InvalidOperationException("No access token!"); } WebConsumer consumer = this.CreateConsumer(); - WebRequest httpRequest = consumer.PrepareAuthorizedRequest(serviceEndpoint, accessToken); + var httpRequest = await consumer.PrepareAuthorizedRequestAsync(serviceEndpoint, accessToken, Response.ClientDisconnectedToken); HttpRequestMessageProperty httpDetails = new HttpRequestMessageProperty(); - httpDetails.Headers[HttpRequestHeader.Authorization] = httpRequest.Headers[HttpRequestHeader.Authorization]; + httpDetails.Headers[HttpRequestHeader.Authorization] = httpRequest.Headers.Authorization.ToString(); using (OperationContextScope scope = new OperationContextScope(client.InnerChannel)) { OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpDetails; return predicate(client); diff --git a/samples/OAuthConsumer/SignInWithTwitter.aspx b/samples/OAuthConsumer/SignInWithTwitter.aspx index 86d29a4..e5ccc97 100644 --- a/samples/OAuthConsumer/SignInWithTwitter.aspx +++ b/samples/OAuthConsumer/SignInWithTwitter.aspx @@ -1,4 +1,4 @@ -<%@ Page Language="C#" AutoEventWireup="true" +<%@ Page Language="C#" AutoEventWireup="true" Async="true" Inherits="OAuthConsumer.SignInWithTwitter" Codebehind="SignInWithTwitter.aspx.cs" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> diff --git a/samples/OAuthConsumer/SignInWithTwitter.aspx.cs b/samples/OAuthConsumer/SignInWithTwitter.aspx.cs index e104f3a..b9d19ef 100644 --- a/samples/OAuthConsumer/SignInWithTwitter.aspx.cs +++ b/samples/OAuthConsumer/SignInWithTwitter.aspx.cs @@ -9,18 +9,20 @@ using System.Web.UI.WebControls; using System.Xml.Linq; using System.Xml.XPath; + using DotNetOpenAuth.Messaging; using DotNetOpenAuth.ApplicationBlock; using DotNetOpenAuth.OAuth; public partial class SignInWithTwitter : System.Web.UI.Page { - protected void Page_Load(object sender, EventArgs e) { + protected async void Page_Load(object sender, EventArgs e) { if (TwitterConsumer.IsTwitterConsumerConfigured) { this.MultiView1.ActiveViewIndex = 1; if (!IsPostBack) { - string screenName; - int userId; - if (TwitterConsumer.TryFinishSignInWithTwitter(out screenName, out userId)) { + var tuple = await TwitterConsumer.TryFinishSignInWithTwitterAsync(Response.ClientDisconnectedToken); + if (tuple != null) { + string screenName = tuple.Item1; + int userId = tuple.Item2; this.loggedInPanel.Visible = true; this.loggedInName.Text = screenName; @@ -32,8 +34,9 @@ } } - protected void signInButton_Click(object sender, ImageClickEventArgs e) { - TwitterConsumer.StartSignInWithTwitter(this.forceLoginCheckbox.Checked).Send(); + protected async void signInButton_Click(object sender, ImageClickEventArgs e) { + var response = await TwitterConsumer.StartSignInWithTwitterAsync(this.forceLoginCheckbox.Checked, Response.ClientDisconnectedToken); + await response.SendAsync(); } } }
\ No newline at end of file diff --git a/samples/OAuthConsumer/Twitter.aspx b/samples/OAuthConsumer/Twitter.aspx index a24c7bd..cf81a12 100644 --- a/samples/OAuthConsumer/Twitter.aspx +++ b/samples/OAuthConsumer/Twitter.aspx @@ -1,4 +1,4 @@ -<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" Inherits="OAuthConsumer.Twitter" Codebehind="Twitter.aspx.cs" %> +<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" Inherits="OAuthConsumer.Twitter" Codebehind="Twitter.aspx.cs" Async="true" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server"> </asp:Content> diff --git a/samples/OAuthConsumer/Twitter.aspx.cs b/samples/OAuthConsumer/Twitter.aspx.cs index 8288ed0..f418fed 100644 --- a/samples/OAuthConsumer/Twitter.aspx.cs +++ b/samples/OAuthConsumer/Twitter.aspx.cs @@ -12,6 +12,8 @@ using DotNetOpenAuth.ApplicationBlock; using DotNetOpenAuth.OAuth; + using DotNetOpenAuth.Messaging; + public partial class Twitter : System.Web.UI.Page { private string AccessToken { get { return (string)Session["TwitterAccessToken"]; } @@ -34,7 +36,7 @@ } } - protected void Page_Load(object sender, EventArgs e) { + protected async void Page_Load(object sender, EventArgs e) { if (this.TokenManager != null) { this.MultiView1.ActiveViewIndex = 1; @@ -42,20 +44,22 @@ var twitter = new WebConsumer(TwitterConsumer.ServiceDescription, this.TokenManager); // Is Twitter calling back with authorization? - var accessTokenResponse = twitter.ProcessUserAuthorization(); + var accessTokenResponse = await twitter.ProcessUserAuthorizationAsync(new HttpRequestWrapper(Request), Response.ClientDisconnectedToken); if (accessTokenResponse != null) { this.AccessToken = accessTokenResponse.AccessToken; } else if (this.AccessToken == null) { // If we don't yet have access, immediately request it. - twitter.Channel.Send(twitter.PrepareRequestUserAuthorization()); + var message = await twitter.PrepareRequestUserAuthorizationAsync(Response.ClientDisconnectedToken); + var response = await twitter.Channel.PrepareResponseAsync(message, Response.ClientDisconnectedToken); + await response.SendAsync(); } } } } - protected void downloadUpdates_Click(object sender, EventArgs e) { + protected async void downloadUpdates_Click(object sender, EventArgs e) { var twitter = new WebConsumer(TwitterConsumer.ServiceDescription, this.TokenManager); - XPathDocument updates = new XPathDocument(TwitterConsumer.GetUpdates(twitter, this.AccessToken).CreateReader()); + XPathDocument updates = new XPathDocument((await TwitterConsumer.GetUpdatesAsync(twitter, this.AccessToken, Response.ClientDisconnectedToken)).CreateReader()); XPathNavigator nav = updates.CreateNavigator(); var parsedUpdates = from status in nav.Select("/statuses/status").OfType<XPathNavigator>() where !status.SelectSingleNode("user/protected").ValueAsBoolean @@ -77,7 +81,7 @@ this.resultsPlaceholder.Controls.Add(new Literal { Text = tableBuilder.ToString() }); } - protected void uploadProfilePhotoButton_Click(object sender, EventArgs e) { + protected async void uploadProfilePhotoButton_Click(object sender, EventArgs e) { if (this.profilePhoto.PostedFile.ContentType == null) { this.photoUploadedLabel.Visible = true; this.photoUploadedLabel.Text = "Select a file first."; @@ -85,11 +89,12 @@ } var twitter = new WebConsumer(TwitterConsumer.ServiceDescription, this.TokenManager); - XDocument imageResult = TwitterConsumer.UpdateProfileImage( + XDocument imageResult = await TwitterConsumer.UpdateProfileImageAsync( twitter, this.AccessToken, this.profilePhoto.PostedFile.InputStream, - this.profilePhoto.PostedFile.ContentType); + this.profilePhoto.PostedFile.ContentType, + Response.ClientDisconnectedToken); this.photoUploadedLabel.Visible = true; } } diff --git a/samples/OAuthConsumer/Yammer.aspx.cs b/samples/OAuthConsumer/Yammer.aspx.cs index d8993fe..57169fc 100644 --- a/samples/OAuthConsumer/Yammer.aspx.cs +++ b/samples/OAuthConsumer/Yammer.aspx.cs @@ -47,23 +47,24 @@ var yammer = new WebConsumer(YammerConsumer.ServiceDescription, this.TokenManager); } - protected void obtainAuthorizationButton_Click(object sender, EventArgs e) { + protected async void obtainAuthorizationButton_Click(object sender, EventArgs e) { var yammer = YammerConsumer.CreateConsumer(this.TokenManager); - string requestToken; - Uri popupWindowLocation = YammerConsumer.PrepareRequestAuthorization(yammer, out requestToken); + var tuple = await YammerConsumer.PrepareRequestAuthorizationAsync(yammer, Response.ClientDisconnectedToken); + Uri popupWindowLocation = tuple.Item1; + string requestToken = tuple.Item2; this.RequestToken = requestToken; string javascript = "window.open('" + popupWindowLocation.AbsoluteUri + "');"; this.Page.ClientScript.RegisterStartupScript(GetType(), "YammerPopup", javascript, true); this.MultiView1.SetActiveView(this.CompleteAuthorizationView); } - protected void finishAuthorizationButton_Click(object sender, EventArgs e) { + protected async void finishAuthorizationButton_Click(object sender, EventArgs e) { if (!Page.IsValid) { return; } var yammer = YammerConsumer.CreateConsumer(this.TokenManager); - var authorizationResponse = YammerConsumer.CompleteAuthorization(yammer, this.RequestToken, this.yammerUserCode.Text); + var authorizationResponse = await YammerConsumer.CompleteAuthorizationAsync(yammer, this.RequestToken, this.yammerUserCode.Text, Response.ClientDisconnectedToken); if (authorizationResponse != null) { this.accessTokenLabel.Text = HttpUtility.HtmlEncode(authorizationResponse.AccessToken); this.MultiView1.SetActiveView(this.AuthorizationCompleteView); diff --git a/samples/OAuthServiceProvider/Members/Authorize.aspx b/samples/OAuthServiceProvider/Members/Authorize.aspx index b3e2c6a..e7be651 100644 --- a/samples/OAuthServiceProvider/Members/Authorize.aspx +++ b/samples/OAuthServiceProvider/Members/Authorize.aspx @@ -1,4 +1,4 @@ -<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" Inherits="OAuthServiceProvider.Authorize" Codebehind="Authorize.aspx.cs" %> +<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" Inherits="OAuthServiceProvider.Authorize" Codebehind="Authorize.aspx.cs" Async="true" %> <asp:Content ID="Content2" ContentPlaceHolderID="Body" runat="Server"> <asp:MultiView runat="server" ActiveViewIndex="0" ID="multiView"> diff --git a/samples/OAuthServiceProvider/Members/Authorize.aspx.cs b/samples/OAuthServiceProvider/Members/Authorize.aspx.cs index faa2147..822d6d0 100644 --- a/samples/OAuthServiceProvider/Members/Authorize.aspx.cs +++ b/samples/OAuthServiceProvider/Members/Authorize.aspx.cs @@ -11,6 +11,8 @@ using DotNetOpenAuth.OAuth.Messages; using OAuthServiceProvider.Code; + using DotNetOpenAuth.Messaging; + /// <summary> /// Conducts the user through a Consumer authorization process. /// </summary> @@ -45,7 +47,7 @@ } } - protected void allowAccessButton_Click(object sender, EventArgs e) { + protected async void allowAccessButton_Click(object sender, EventArgs e) { if (this.AuthorizationSecret != this.OAuthAuthorizationSecToken.Value) { throw new ArgumentException(); // probably someone trying to hack in. } @@ -57,7 +59,8 @@ ServiceProvider sp = new ServiceProvider(Constants.SelfDescription, Global.TokenManager); var response = sp.PrepareAuthorizationResponse(pending); if (response != null) { - sp.Channel.Send(response); + var responseMessage = await sp.Channel.PrepareResponseAsync(response, Response.ClientDisconnectedToken); + await responseMessage.SendAsync(); } else { if (pending.IsUnsafeRequest) { this.verifierMultiView.ActiveViewIndex = 1; diff --git a/samples/OAuthServiceProvider/OAuthServiceProvider.csproj b/samples/OAuthServiceProvider/OAuthServiceProvider.csproj index 5419347..2be5873 100644 --- a/samples/OAuthServiceProvider/OAuthServiceProvider.csproj +++ b/samples/OAuthServiceProvider/OAuthServiceProvider.csproj @@ -54,6 +54,8 @@ <Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.Linq" /> <Reference Include="System.IdentityModel" /> + <Reference Include="System.Net.Http" /> + <Reference Include="System.Net.Http.WebRequest" /> <Reference Include="System.ServiceModel" /> <Reference Include="System.Web.ApplicationServices" /> <Reference Include="System.Web.DynamicData" /> diff --git a/samples/OAuthServiceProvider/packages.config b/samples/OAuthServiceProvider/packages.config index 6562527..8e40260 100644 --- a/samples/OAuthServiceProvider/packages.config +++ b/samples/OAuthServiceProvider/packages.config @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <packages> <package id="log4net" version="2.0.0" targetFramework="net45" /> + <package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net45" /> </packages>
\ No newline at end of file |