C# Windows phone HttpClient PostAsync挂起,无响应
从WP应用程序调用C# Windows phone HttpClient PostAsync挂起,无响应,c#,windows-phone-8,asp.net-web-api,deadlock,C#,Windows Phone 8,Asp.net Web Api,Deadlock,从WP应用程序调用HttpClientpost方法时遇到问题。PostAsync始终挂起并且不提供任何响应。当我从WPF应用程序尝试时,相同的代码也会起作用。以下是我正在做的: 服务器Web API代码 public class GameController : ApiController { [HttpPost] public GameDto CreateGame(GameDto gameDto) { try {
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;
}
}
private async void按钮\u单击(对象发送方,路由目标)
{
尝试
{
HttpClient=新的HttpClient();
client.BaseAddress=新Uri(“http://localhost:59580");
client.DefaultRequestHeaders.Accept.Add(
新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
GameDto newGame=新GameDto();
newGame.CreatedBy=1;
newGame.Name=txtGameName.Text;
newGame.GameTypeId=(int)cmbGameType.SelectedValue;
MediaTypeFormatter jsonFormatter=新的JsonMediaTypeFormatter();
var response=wait client.PostAsync(“api/Game/CreateGame”、newGame、jsonFormatter);
response.EnsureSuccessStatusCode();//抛出错误代码。
var userDto=wait response.Content.ReadAsAsync();
//_产品。复制自(产品);
Show(userDto.Id.ToString());
}
捕获(例外)
{
投掷;
}
}
签出此
解决了我的问题。
使用配置等待
var result = await httpClient.GetStreamAsync("weeklyplan")
.ConfigureAwait(continueOnCapturedContext:false);
代码在哪里阻塞?顺便说一句,捕获一个异常只是为了重新显示它是没有意义的http://localhost是手机/仿真器本身-这几乎肯定不是您想要做的。代码会在响应时阻塞。EnsureSuccessStatusCode()。异常处理尚未完成。Http:\\localhost是虚拟的,我使用不同的WebAPi URL。
response.EnsureSccessStatusCode()
是在原始UI线程上发生的同步调用。如果是同步的,至少应该在一段时间后执行并提供结果或引发异常。我根本没有得到任何回应。当我在WPF客户端中使用相同的代码块时,它可以很好地工作。谢谢RK,这也解决了我的问题!