C# Windows phone HttpClient PostAsync挂起,无响应

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 {

从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;
        }

    }
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,这也解决了我的问题!