代码之家  ›  专栏  ›  技术社区  ›  Dave

Windows服务未与API连接

  •  0
  • Dave  · 技术社区  · 1 年前

    我有一个我创建的ASP.Net API。它访问一个数据库,我必须使用VPN才能与之连接。在执行此操作时,API将正常工作。

    然后我创建了一个windows服务,它从这个API接收JSON。在测试中,我将其用作控制台应用程序,方法如下: https://social.technet.microsoft.com/wiki/contents/articles/30957.c-windows-service-in-console-mode-for-debug-and-admin.aspx

    当以这种方式进行测试时,一切都很好,正如预期的那样。然而,如果我以发布模式构建服务并安装,它将不会与API连接。我相信这可能是因为它在操作系统级别运行,没有受到VPN的影响?我只是不确定该如何避开这个问题。

    下面是我如何从API连接和接收JSON。

    var client = new HttpClient();
    client.BaseAddress = new Uri(URL);
    client.DefaultRequestHeaders.Add("User-Agent", "Anything");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"))
    
    //Initializes a temp list to be returned
    List<Company> temp2 = new List<Company>();
                
    var task = client.GetAsync(path);
    task.Wait();
    var response = task.Result;
    
    if (response.IsSuccessStatusCode)
    {
        var temp = response.Content.ReadAsStringAsync().Result;
        temp2 = JsonConvert.DeserializeObject<List<Company>>(temp);
    }
    

    我简要地阅读了关于DefaultProxy的内容,但不太了解它的用途以及在这种情况下是否需要它。

    0 回复  |  直到 1 年前
        1
  •  0
  •   Dave    1 年前

    我发现了这个问题。感谢@fildor建议我使用wait。这并没有解决问题,但最终给了我一个可以处理的错误。

    发生的情况是API域没有使用有效的SSL/TLS证书。 现在,使用:

      var handler = new HttpClientHandler()
      {
          ServerCertificateCustomValidationCallback = delegate { return true; },
      };
      var client = new HttpClient(handler);
    

    一切都按预期进行。