【问题标题】:Windows phone HttpClient PostAsync hang with no responseWindows phone HttpClient PostAsync 挂起且无响应
【发布时间】: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


【解决方案1】:

结帐此 Answer res.解决了我的问题。 使用 ConfigureAwait

var result = await httpClient.GetStreamAsync("weeklyplan")
                         .ConfigureAwait(continueOnCapturedContext:false);

【讨论】:

  • 感谢 RK,这也解决了我的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多