我在从我的MVC.Net Intranet应用程序发出HTTP请求时遇到问题。我在使用RestSharp库时遇到了这个问题,但是把它煮成了一个更简单的复制品。
以下代码:
using (var client = new WebClient())
{
var contents = client.DownloadString("http://www.google.com");
}
这可能是Not able to connect to website URLs from Asp.Net WebApi Action Methods的重复(我在上面提到了问题证明代码),但在我的情况下,这是在我的计算机上运行的本地它可以从控制台应用程序中正常工作。
我尝试了各种不同的代码段,包括使用HttpClient
代替WebClient
:
using(System.Net.Http.HttpClient c = new System.Net.Http.HttpClient())
{
var msg = c.GetAsync("http://www.google.com").Result.Content.ReadAsStringAsync().Result;
}
但是我在所有情况下都得到相同或类似的结果和错误。对于上面的代码,我最终得到一个'TaskCancelled'异常,没有内部异常。
我也有同事在他们自己的机器上尝试相同的结果。我已经阅读了一些类似的问题,人们在ASP应用程序中讨论由SyncronizationContext
引起的死锁问题,但这似乎与异步调用有关。在这里,据我所知,我所做的一切都是同步的,所以我看不出它是如何适用的。
实际上,我正在使用RestSharp库,我用它来创建自己的客户端库,用于与facebook API通信。我从一个控制台应用程序test-harness中测试了这个,它运行得很好,但是当我开始在我的MVC应用程序中使用它时,它都会超时。
更新
我已经修改了一些,并尝试访问内部公司网页而不是外部网页(Google)。我发现它立即起作用 - 因此强烈暗示它与权限或代理设置有关。
更新2
我已经运行Fiddler检查请求,看看发生了什么。当fiddler正在运行时请求成功。 这让我觉得这可能是一些奇怪的权限问题?作为一项安全措施,我们的登录帐户没有管理员权限,而是我们有一个单独的非交互式帐户,具有管理员权限,我们可以用它来运行需要管理员权限的应用程序,或者安装软件等。要让小提琴手捕获流量,我必须使用此帐户运行它。
尽管如此,通过控制台应用程序或LinqPad使用我自己的普通帐户调用仍然正常 - 所以我想我的问题就变成了: