2010-12-16 3 views
0

В образцах 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-запрос. Я что-то упускаю, делая так? Я, безусловно, набираю обороты с точки зрения производительности!

ответ

1

Что вы делаете, выглядит совершенно нормально. Ваш звонок PrepareAuthorizedRequest подписывает исходящий HTTP-запрос, и вы можете отправить его асинхронно или иным образом после этого, не задумываясь о проблемах, связанных с OAuth.

Я не уверен, какой код вы имеете в виду, когда упоминаете «проверить, что ответ не является нулевым» и т. Д. Но в тестировании, которое я сделал, бывают случаи, когда Response (оба в исключении и случай исключения) может быть нулевым. Я точно не помню, когда.

+0

Большое спасибо, Андрей! – 2010-12-18 04:32:28

Смежные вопросы