【发布时间】:2013-12-23 22:50:40
【问题描述】:
我在从 WP 应用程序调用 HttpClient post 方法时遇到问题。PostAsync 总是挂起并且没有给出任何响应。当我从 WPF 应用程序尝试它时,相同的代码可以工作。这是我正在做的事情:
服务器 Web API 代码
public class GameController : ApiController
{
[HttpPost]
public GameDto CreateGame(GameDto gameDto)
{
try
{
GameManager bl = new GameManager();
gameDto = bl.CreateGame(gameDto);
return gameDto;
}
catch (Exception)
{
throw;
}
}
}
从类库调用客户端 WP8 代码
private async void Button_Click(object sender, RoutedEventArgs e)
{
try
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:59580");
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
GameDto newGame = new GameDto();
newGame.CreatedBy = 1;
newGame.Name = txtGameName.Text;
newGame.GameTypeId = (int)cmbGameType.SelectedValue;
MediaTypeFormatter jsonFormatter = new JsonMediaTypeFormatter();
var response = await client.PostAsync<GameDto>("api/Game/CreateGame", newGame, jsonFormatter);
response.EnsureSuccessStatusCode(); // Throw on error code.
var userDto = await response.Content.ReadAsAsync<GameDto>();
//_products.CopyFrom(products);
MessageBox.Show(userDto.Id.ToString());
}
catch (Exception)
{
throw;
}
}
【问题讨论】:
-
代码块在哪里?顺便说一句,捕获异常只是为了重新抛出它是没有意义的。
-
另外,
http://localhost是手机/模拟器本身 - 这几乎肯定不是您想要做的。 -
response.EnsureSuccessStatusCode() 上的代码块; .异常处理尚未完成。 Http:\\localhost 是虚拟的,我使用不同的 WebAPi URL。
-
response.EnsureSuccessStatusCode()是在原始 UI 线程上发生的同步调用。 -
如果它是同步的,至少它应该执行并提供结果或在一段时间后抛出异常。我根本没有得到任何回应。当我在 WPF 客户端中使用相同的代码块时,它可以正常工作。
标签: c# windows-phone-8 asp.net-web-api deadlock