来自MVC应用程序的外部HTTP请求失败

时间:2014-11-24 10:24:20

标签: asp.net-mvc httprequest

我在从我的MVC.Net Intranet应用程序发出HTTP请求时遇到问题。我在使用RestSharp库时遇到了这个问题,但是把它煮成了一个更简单的复制品。

以下代码:

using (var client = new WebClient())
{
    var contents = client.DownloadString("http://www.google.com");
}
  • 将在控制台应用程序中成功运行(在我的本地计算机上,从Visual Studio 2013进行调试)。
  • 将从LinqPad
  • 中成功运行(在我的本地计算机上)
  • 超时(在我的本地计算机上,从Visual Studio 2013调试,使用IIS Express托管)从MVC Intranet应用程序中的控制器操作运行时。

这可能是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应用程序中使用它时,它都会超时。

  • 之前有没有人见过这个问题,对于我出错的地方有什么想法,或者问题可能是什么?
  • 是否与锁定/死锁有关?
  • 可能与权限/代理有关吗?我们在工作中有相当严格的Web代理规则,显然我的用户正确配置了这些规则。 IIS Express托管可以更改权限还是分配给应用程序的用户? IIS Express服务目前使用我的用户名运行。

更新

我已经修改了一些,并尝试访问内部公司网页而不是外部网页(Google)。我发现它立即起作用 - 因此强烈暗示它与权限或代理设置有关。

  • 任何人都可以解释为什么控制台应用程序和MVC应用程序会有所不同吗?

更新2

我已经运行Fiddler检查请求,看看发生了什么。当fiddler正在运行时请求成功。 这让我觉得这可能是一些奇怪的权限问题?作为一项安全措施,我们的登录帐户没有管理员权限,而是我们有一个单独的非交互式帐户,具有管理员权限,我们可以用它来运行需要管理员权限的应用程序,或者安装软件等。要让小提琴手捕获流量,我必须使用此帐户运行它。

尽管如此,通过控制台应用程序或LinqPad使用我自己的普通帐户调用仍然正常 - 所以我想我的问题就变成了:

  • 对于通过IIS Express(Visual Studio Debugging)本地托管的asp / MVC应用程序,将运行哪个用户,以及控制台应用程序有哪些差异(如果有的话)?

0 个答案:

没有答案