2010-12-16 4 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; 
} 

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

답변

1

당신이하고있는 일은 완전히 멋지게 보입니다. PrepareAuthorizedRequest으로 전화하면 발신 HTTP 요청에 서명하고 OAuth 관련 문제에 대한 추가 고려없이 비동기 적으로 또는 다른 방법으로 보낼 수 있습니다.

"응답이 null이 아닌지 확인"이라고 언급 할 때 어떤 코드를 언급하는지 잘 모르겠습니다. 그러나 제가 한 테스트에서 Response (둘 다 예외적으로 예외가 아닌 경우)는 null 일 수 있습니다. 나는 언제 정확하게 기억하지 못한다.

+0

감사합니다. Andrew! –