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;
}
분명히 나에게 잘 돌아가고 있지만 샘플의 구현에는 나에게 명확한 결과를 얻지 못하는 몇 가지 추가 클래스가 사용됩니다. 그들은 content-encoding이 이상하게 설정되지 않았는지 확인하고 응답이 null이 아닌지 확인합니다. 둘 다 내 코드가 아마도 예외를 던질 것입니다. HTTPS 요청이기 때문에 특정 시나리오에서 어쨌든 발생하지 않을 것으로 예상되는 서버에서 온 응답을 확인하는 것과 같은 작업을 수행하지는 않습니다. 나는 이런 식으로 일을함으로써 무언가를 놓치고 있습니까? 나는 성능 측면에서 확실히 이득을 얻고 있습니다!
감사합니다. Andrew! –