2014-10-20 2 views
1

작업 코드를 웹 메서드로 옮기는 데 어려움이 있습니다. SteamAPI 및 비동기 메서드 인 RunAsync()를 사용하여 놀고 있는데, 코드 비하인드에서 모두 처리 될 때 이전에 작동했습니다.웹 메서드 내에서 비동기 메서드 호출 및 반환 받기

하지만이 작업을 JQuery .AJAX()가 처리하는 웹 메서드로 옮기고 싶습니다. 기본적으로 웹 메서드 내에서 메서드를 호출하고 JQuery에 의해 처리/표현되도록 데이터를 다시 가져 오려합니다. 전에는 많은 Web Methods를 다루었지만, 정적이 아닌 메소드와 비동기 메소드를 호출하는 메소드는 없었습니다.

실제로 오류가 발생하지는 않지만 API를 호출 할 때 바로 그곳에 앉아서 피들러에서 데이터를 요청하고 반환하는 것을 볼 수 있지만 그 점에서 결코 이동하지 않습니다. 그것은 '내 데이터가있다'명령을받지 못했습니다. 결국 내 .ajax 통화는 30 초 후에 종료됩니다.

누구나 볼 수 있습니까? 특정 브레이크 포인트를 배치하지만, 피들러가 반응을 보인 후에도 절대로 움직이지 않습니다.

string res = await client.GetStringAsync("IPlayerService/GetOwnedGames/v0001/?key=my_steam_key&steamid=my_steam_id&include_appinfo=1&include_played_free_games=1&format=json"); 

코드 및 스크린 샷을 참조하십시오.

[System.Web.Services.WebMethod] 
    public static async Task<string> Find_Games(string user) 
    { 
     string rVal = string.Empty; 
     dynamic user_game_data; 

     try 
     { 
      var thisPage = new _default(); 
      user_game_data = await thisPage.RunAsync(); 

      return user_game_data; 
     } 
     catch (Exception err) 
     { 
      throw new Exception(err.Message); 
     } 

    } 


    public async Task<string> RunAsync() 
    { 
     using (var client = new HttpClient()) 
     { 
      client.BaseAddress = new Uri("http://api.steampowered.com/"); 
      client.DefaultRequestHeaders.Accept.Clear(); 
      client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
      //client.Timeout = System.TimeSpan.FromMilliseconds(15000); //15 Secs 

      try 
      { 
       string res = await client.GetStringAsync("IPlayerService/GetOwnedGames/v0001/?key=my_steam_key&steamid=my_steam_id&include_appinfo=1&include_played_free_games=1&format=json"); 

       // Read & Deserialize data 
       //dynamic json_data = JsonConvert.DeserializeObject(res); 
       ////int gamecount = json_data.response.game_count; 
       //await saveOwnedGames(json_data, gamecount); 
       return res; 
      } 
      catch (HttpRequestException e) 
      { 
       throw new Exception(e.Message); 
      } 

     } 
    } 
사전에

Fiddler Response, which i can examine the returned json data

감사합니다, 당신은 더 이상 정보가 필요하면 알려주세요.

+0

당신이 당신의 코드를 디버깅하는 것을 시도했다 :

WebClient은 사용 해보세요? –

+0

물론 오류는 반환되지 않습니다. 그냥 Ajax 호출 시간이 초과 될 때까지 Runasync()를 호출 한 후에 거기에 앉는다. 위에서 언급 한 것처럼 피 들러에서 일하면서 나는 전화와 통화에서 반환 된 데이터를 볼 수 있습니다. 반환 된 데이터로는 아무 것도하지 않는 것 같습니다. – JGreasley

+0

@JGreasley 브라우저에 http : //api.steampowered.com/I ... URL을 치고 (사용중인 모든 쿼리 문자열 매개 변수를 사용하여) 아무 것도 반환하지 않는지, 아니면 단지 잘못된 요청인지 확인하십시오. – fooser

답변

0

비동기 작업없이이 작업을 수행 할 수 있습니다.

[System.Web.Services.WebMethod] 
public static string Find_Games(string user) 
{ 
    using (var client = new System.Net.WebClient()) 
    { 
     return client.DownloadString(String.Concat("http://api.steampowered.com/", "IPlayerService/GetOwnedGames/v0001/?key=my_steam_key&steamid=my_steam_id&include_appinfo=1&include_played_free_games=1&format=json")); 
    } 
} 
+0

완벽한 - 모든 도움을 주셔서 감사합니다. – JGreasley

+1

비동기 코드 문제의 해결 방법은 동기식으로 다시 작성하지 않는 것입니다. – supertopi

관련 문제