DotNetOpenAuth и Async WebRequest (BeginGetResponse) - PullRequest
0 голосов
/ 16 декабря 2010

Примеры DotNetOpenAuth не включают пример для асинхронного выполнения вызова. Вот моя реализация. Я хотел бы знать, если я делаю что-то не так.

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 Ответ

1 голос
/ 18 декабря 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...