WPF 应用程序在 HttpClient PostAsync 方法中无响应或异常退出
WPF App exits without response or exception at HttpClient PostAsync method
我浏览了几个 SO 和论坛 - 花了几个小时尝试我在这些网站上找到的几个 answers/comments。我还是没能解决问题。
注 1:它以前在我的笔记本电脑上工作过——所有进一步的开发都是在一个单独的分支上进行的。原始分支和新分支都不起作用。它适用于我队友的笔记本电脑,但我们仍然无法找出问题所在。
注2:我曾尝试将原始分支重新克隆到一个单独的目录中,但也失败了。同样,我们无法在我队友的系统上重现该问题。
环境 - Windows10,Visual Studio2019,WPF 应用程序(.NET Framework 4.8),C#8
public class SomeClient
{
private readonly string _host;
private readonly HttpClient _client;
public SomeClient(HttpClient client, string host)
{
_host = host;
_client = client;
}
public async Task<string> GetResponse(string request)
{
HttpContent content = new StringContent(request, Encoding.UTF8, "application/xml");
HttpResponseMessage body = await _client.PostAsync(_host, content);
return await body.Content.ReadAsStringAsync().ConfigureAwait(false);
}
}
调用代码(测试方法)
[TestClass]
public class SomeClientShould
{
[TestMethod]
public async Task ReturnResponse()
{
string request = "";
SomeClient client = new SomeClient(new HttpClient(), @"http:\localhost:9888\");
string response = await client.GetResponse(request);
Assert.AreEqual("<RESPONSE>Server is Running</RESPONSE>", response);
}
}
这里我没有发出任何请求,发送一个空字符串,它应该以 Assert 中显示的字符串响应(通过我队友的系统,我的系统上的 Postman 也可以)。
我已经尝试了 ConfigureAwait(false) 的各种组合,也没有阻塞代码 - 它一直是异步的。即使是上面显示的简单测试方法也会在 PostAsync 行之后退出而不执行下一行。 Try-Catch 没有捕捉到任何异常,我遇到了故障。
所以我很傻,首先主机 uri 出错了 - 测试项目中的斜线必须反过来 - “http://localhost:9888/”。所以现在测试 运行。
下一期,在我的项目之间,Microsoft.Bcl.AsyncInterfaces 库的版本不匹配。
不知何故,一个项目引用了最新版本,而另一个却没有?也许问题是在合并原始分支期间出现的——在我和我的队友创建各自的开发分支以进行进一步开发之前。不管怎样,现在可以了。
我浏览了几个 SO 和论坛 - 花了几个小时尝试我在这些网站上找到的几个 answers/comments。我还是没能解决问题。
注 1:它以前在我的笔记本电脑上工作过——所有进一步的开发都是在一个单独的分支上进行的。原始分支和新分支都不起作用。它适用于我队友的笔记本电脑,但我们仍然无法找出问题所在。
注2:我曾尝试将原始分支重新克隆到一个单独的目录中,但也失败了。同样,我们无法在我队友的系统上重现该问题。
环境 - Windows10,Visual Studio2019,WPF 应用程序(.NET Framework 4.8),C#8
public class SomeClient
{
private readonly string _host;
private readonly HttpClient _client;
public SomeClient(HttpClient client, string host)
{
_host = host;
_client = client;
}
public async Task<string> GetResponse(string request)
{
HttpContent content = new StringContent(request, Encoding.UTF8, "application/xml");
HttpResponseMessage body = await _client.PostAsync(_host, content);
return await body.Content.ReadAsStringAsync().ConfigureAwait(false);
}
}
调用代码(测试方法)
[TestClass]
public class SomeClientShould
{
[TestMethod]
public async Task ReturnResponse()
{
string request = "";
SomeClient client = new SomeClient(new HttpClient(), @"http:\localhost:9888\");
string response = await client.GetResponse(request);
Assert.AreEqual("<RESPONSE>Server is Running</RESPONSE>", response);
}
}
这里我没有发出任何请求,发送一个空字符串,它应该以 Assert 中显示的字符串响应(通过我队友的系统,我的系统上的 Postman 也可以)。
我已经尝试了 ConfigureAwait(false) 的各种组合,也没有阻塞代码 - 它一直是异步的。即使是上面显示的简单测试方法也会在 PostAsync 行之后退出而不执行下一行。 Try-Catch 没有捕捉到任何异常,我遇到了故障。
所以我很傻,首先主机 uri 出错了 - 测试项目中的斜线必须反过来 - “http://localhost:9888/”。所以现在测试 运行。
下一期,在我的项目之间,Microsoft.Bcl.AsyncInterfaces 库的版本不匹配。
不知何故,一个项目引用了最新版本,而另一个却没有?也许问题是在合并原始分支期间出现的——在我和我的队友创建各自的开发分支以进行进一步开发之前。不管怎样,现在可以了。