由于目标机器主动拒绝,因此无法建立连接

时间:2017-04-20 18:32:12

标签: visual-studio http networking tcp routing

等一下。在将此标记为重复之前。我的问题略有不同。 所以我正在调用一个抛出此异常的api。但是 - 问题是只有在从服务器进行调用时才会发生这种情况。如果我进行角度/ ajax调用 - 这完全正常。 当我写下以下内容时.net中的内容

using (HttpClient hc = new HttpClient())
{
    hc.BaseAddress = new Uri(endpoint); 
    hc.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    HttpResponseMessage response =  hc.GetAsync(url).Result;
}

我得到内部异常说 无法建立连接,因为目标计算机主动拒绝了它xx.xxx.xx.xx:pp

我检查了所有链接Herehere。他们都在讨论防火墙/网络问题。我不觉得这是防火墙或网络,因为它通过ajax工作。 我正在考虑更多与服务器配置有关的事情。任何指针都会有所帮助。

此外 - 当我从浏览器或通过提琴手拨打电话时,此功能正常。

2 个答案:

答案 0 :(得分:1)

如果您正在从同一台计算机上执行相同的API调用,而另一种方法正在运行,而另一种方法不起作用,那么您可能无法发送服务器所需的内容。

当您使用AJAX调用时,如果您希望API响应,您的浏览器会附加许多您需要复制的辅助信息。例如,cookie和用户代理字符串。服务器检测到您浏览器,并拒绝您的请求。这有很多正当理由,例如尝试停止自动机器人来点击他们的API。

您可以使用开发人员工具查看浏览器发送的内容。例如,在Chrome中,您可以查看网络请求标头,如下所示:

Chrome

或者,它可能仍然是您的防火墙限制您的应用程序并允许您的浏览器通过。尝试明确为您的应用程序添加规则。

答案 1 :(得分:0)

所以我终于想出了原因 - 但我不确定为什么会这样。

原因是因为 - Visual studio不尊重我们的代理设置。 基本上 - 我们在这里谈论3台服务器

  

所以我的机器ip:xxx.xx.xx.1
  我们的公司代理服务器ip:xx.xx.xx.2
  api ip:xxx.xx.xx.3 url(api.com)

每次通话都通过我的代理进行路由,我可以在互联网设置中查看。所以当我安装wireshark并看到路线时 - >当我从visual studio访问时,它直接尝试从我的主机访问api服务器,而无需通过代理。

  

即:xxx.xx.xx.1 - > xxx.xx.xx.3 [失败]

当我从浏览器尝试时 - 它尊重代理设置

  

即:xxx.xx.xx.1 - > xxx.xx.xx.2

     

[成功] xxx.xx.xx.2 - > xxx.xx.xx.3 [成功]

修复是 - 当我添加主持人条目

  

xxx.xx.xx.2 - api.com

事情开始起作用 - 因为所有对api的调用现在都通过代理服务器进行路由。 我不知道为什么会这样或者如何避免这种情况。至少解决了我的问题。

我检查了设置 - 我的web.config / machine.config中没有任何内容。