В образцах DotNetOpenAuth нет примера для асинхронного вызова. Вот моя реализация. Я хотел бы знать, что я делаю что-то неправильно.DotNetOpenAuth и Async WebRequest (BeginGetResponse)
public static IAsyncResult BeginGetFromGoogle(string accessToken)
{
var oauthConsumer = new WebConsumer(ServiceDescription, TokenManager);
var request = oauthConsumer.PrepareAuthorizedRequest(googleEndpoint, accessToken, OAuthOpenIdHelper.MakeParameters("key", googleApiKey));
return request.BeginGetResponse(new AsyncCallback(endGetFromGoogle), new GetFromGoogleContext { Request = request });
}
protected static void endGetFromGoogle(IAsyncResult result)
{
var context = (GetFromGoogleContext)result.AsyncState;
WebResponse response = context.Request.EndResponse(result);
string body = new StreamReader(response.GetResponseStream()).ReadToEnd();
var serializer = new JavaScriptSerializer();
// serializer.Deserialize<something>(); // do something with the data
}
protected class GetFromGoogleContext
{
public HttpWebRequest Request;
}
Чтобы было ясно, это работает хорошо для меня, но реализация в образцах использует пару дополнительных классов, которые не выполняют каких-либо четкий результат для меня; они, похоже, проверяют, что кодировка содержимого не задана странно, и проверьте, что ответ не равен нулю, оба из которых, по-видимому, будут исключать исключение из моего кода. Они, похоже, не делают ничего похожего на подтверждение ответа от предполагаемого сервера, что вряд ли будет в любом случае в моем конкретном сценарии, поскольку это HTTPS-запрос. Я что-то упускаю, делая так? Я, безусловно, набираю обороты с точки зрения производительности!
Большое спасибо, Андрей! – 2010-12-18 04:32:28