我在将一段工作代码移动到Web方法时遇到了困难。我正在使用SteamAPI和异步方法RunAsync(),当它全部在代码隐藏中处理时,它们之前都在工作。
但是我想把这个动作转移到一个Web方法,由JQuery .AJAX()处理。我基本上是在Web方法中调用该方法,并希望将数据恢复为由JQuery处理/表示。我以前处理过很多Web方法,但没有调用非静态方法和异步方法。
我实际上并没有收到错误,但是当调用API时,它只是坐在那里,我可以看到它在fiddler中请求数据(并返回它),但它从未从那一点开始,就好像它一样没有收到'继续我有我的数据'命令。最终我的.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);
}
}
}
提前致谢,如果您需要更多信息,请与我们联系。
答案 0 :(得分:0)
您可以在没有异步内容的情况下完成此操作。
尝试WebClient:
[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"));
}
}