REST调用因服务而失败,但并非因WinForms-App

时间:2019-11-27 13:59:15

标签: c# web-services service

我尝试通过Windows服务(使用在线找到的“ TimedHostedService”)通过REST调用获取一些信息。我在“ StartAsync”中启动计时器,然后调用“ DoWork”方法。我将其作为“异步”方法命名为:

ICollection<Module> allModules = await client.GetModulesAsync();

此方法是由NSwag自动生成的(所以我想它是正确的:-))。 它使用HttpClient进行GET请求。 GetModulesAsync:

var urlBuilder_ = new System.Text.StringBuilder();
urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/Modules");
var client_ = _httpClient;
try
{
   using (var request_ = new System.Net.Http.HttpRequestMessage())
   {
       request_.Method = new System.Net.Http.HttpMethod("GET");  request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));    
      PrepareRequest(client_, request_, urlBuilder_);
      var url_ = urlBuilder_.ToString();
      request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
      PrepareRequest(client_, request_, url_);    
      var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false); //here it fails
...

当调用“ SendAsync”(最后一个代码行)时,它直接进入try-finally的“ final”。万一我将全部内容(包括DoWork和StartAsnc)复制到WinForms-App中,则一切正常。在WinForms-App中,我不是从IHostedService和IDisposable派生的,而是将其余所有内容保留下来。

1 个答案:

答案 0 :(得分:0)

从此代码段很难得出此方法调用的整个上下文(进行... SendAsync调用的那个),因此可能是Task从未等待异步操作完成,我建议您停顿WhenAll()任务完成或只是ConfigureAwait(true)并观察行为,然后