2017-04-20 62 views
0

等待。在将其标记为重复之前。我有一个稍微不同的问题。 所以我打电话给一个引发这个异常的api。但是 - 这种情况只有在通过服务器进行调用时才会发生。如果我做一个角/阿贾克斯调用 - 这工作得很好。 凡在.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工作。 我在考虑更多关于服务器配置。任何指针都会有帮助。

此外 - 这个工程时,我从浏览器或通过提琴手的调用。

+0

因此,您使用C#而不是使用C#调用同一台机器的相同API端点,使用它的AJAX工作。正确? – MrZander

+0

另外,你有权访问服务器配置,或者这是一个外部API? – MrZander

+0

@MrZander - 正确。相同的Api - 相同的电话。相同的网址。它是由不同团队拥有的外部API。我可以要求他们特别检查一些事情。但我不能直接访问 –

回答

0

所以我终于明白了原因 - 但我不确定它为什么会发生。

原因是因为 - Visual Studio不尊重我们的代理设置。 本质 - 我们正在谈论这里3服务器

所以我的机器IP:xxx.xx.xx.1
本公司代理服务器的IP:xx.xx.xx.2
的API IP:XXX .xx.xx.3网址(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。

1

如果您在同一台机器上进行相同的API调用,并且一个方法正在工作,而另一个方法正在工作,那么您很可能不会发送服务器需要的东西。

当您使用AJAX调用时,如果您希望API响应,您的浏览器会附加大量需要复制的辅助信息。例如,Cookie和用户代理字符串。服务器检测到你是而不是浏览器,并拒绝你的请求。这里有很多有效的原因,比如试图让停止自动机器人击中他们的API。

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

Chrome

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

+0

虽然这是真的 - 我的API可以执行没有任何东西。找到附上这个电话的小提琴手。你可以看到,在标题 - 我几乎没有什么,但工程。 http://i.imgur.com/cexxdaQ.png –

+0

@kveey然后我认为它一定是某种本地配置问题。您是否尝试过防火墙排除? – MrZander

相关问题