0

我是 ASP.NET Web API 的新手,我正在努力解决一个非常奇怪的问题。

我有一些调用 RESTful 服务的代码,它可以从控制台项目中正常执行,但我无法从在 .NET 4.0 下运行的 MVC4 项目中运行它

调用服务的代码非常简单:

internal string Test()
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("https://testserver");

        var task = client.GetAsync("/someUri")
        var response = task.Result;
        response.EnsureSuccessStatusCode();

        return response.Content.ReadAsStringAsync().Result;
    }
}

如前所述,从控制台项目调用它按预期工作,我会在几毫秒内得到响应,但是如果我在几秒钟后从 MVC4 控制器中的操作调用该方法,我会收到一条消息,指出:“连接尝试失败,因为连接方一段时间后没有正确响应,或者连接的主机没有响应,建立连接失败”。

奇怪的是,在调试 MVC4 版本时,任务状态总是显示为 WaitingForActivation。

运行 fiddler 不会显示从 MVC4 版本发出的任何请求,但对于控制台版本再次显示。

经过相当认真的谷歌搜索后,我找不到其他人似乎有这个问题,所以我猜我从根本上误解了一些东西,但目前我不确定是什么!

英国夏令时 16:55 更新,2012 年 11 月 9 日

更奇怪的是,我刚刚创建了一个新的 MVC4 站点,我可以毫无问题地调用该方法!我现在正在尝试比较这些站点,但是一个是升级到 MVC4 的现有站点,另一个是一个新的空白站点,因此发现相关差异可能很棘手。

2012 年 9 月 14 日英国夏令时 16:44 更新

这现在看起来像是一些基础设施/网络问题。

我使用 .NET 4.5 将项目升级到 VS2012,以便我可以使用 async/await 来尝试建议的实现以避免死锁。这并没有改变任何东西,所以我回到了第 1 格。

我用一个新的 MVC4 项目、一个新的服务库和一个单元测试项目创建了一个新的解决方案,以在 MVC 之外运行服务库。

在服务库中,我创建了一种方法来调用公共的“我的 IP 是什么”服务,另一种方法是调用公开但仅正确响应公司 IP 地址的公司服务。

对于某些背景,我通过 VPN 连接到公司 LAN。

当与 VPN 断开连接时,在单元测试和 MVC 中,IP 服务响应 HTTP 200,公司服务按预期响应 HTTP 404。

当连接到 VPN 时,单元测试都响应 HTTP 200,MVC 都超时。

接下来,我在本地运行 MS Soap Tool,并用它来代理对公司服务的调用。所有调用(无论是来自单元测试还是 MVC)都会显示请求和响应,但是单元测试会注册响应,而 MVC 控制器不会。

我唯一的另一个想法是这可能与回复的大小有关?除了单元测试调用公司服务之外,所有的“成功”都有很少的回复?

4

1 回答 1

0

Microsoft 推荐的将 MVC3 升级到 MVC4 站点的方法是从一个全新的 MVC4 站点开始迁移您的视图、控制器和代码。所以我认为您的升级步骤可能是您的问题的一部分,因为您能够让它在您创建的新 MVC4 站点中工作。如果您需要手动升级现有站点,我将按照将 ASP.NET MVC 3 项目升级到 ASP.NET MVC 4中概述的步骤进行操作

于 2012-09-11T17:21:41.380 回答