ASP.NET WebAPI从MVC4控制器失败

时间:2012-09-11 14:27:20

标签: asp.net-mvc-4 asp.net-web-api

我是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版本发出的任何请求,但同样适用于控制台版本。

经过一段相当严重的谷歌搜索后,我找不到其他似乎有这个问题的人,所以我猜我从根本上误解了一些东西,但此刻我不确定是什么! / p>

更新时间:16:55 BST,11/09/2012

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

更新16:44 BST,14/09/2012

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

我使用.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控制器则不会。

我唯一的另一个想法是它可能与回复的大小有关?除了呼叫公司服务的单元测试之外,所有“成功”都有非常小的回复?

1 个答案:

答案 0 :(得分:0)

微软推荐的将MVC3升级到MVC4站点的方法是从一个全新的MVC4站点开始,迁移你的视图,控制器和放大器。代码结束。因此,我认为您的升级步骤可能是您的问题的一部分,因为您可以在您创建的新MVC4站点中使用它。如果您需要手动升级现有网站,我会按照Upgrading ASP.NET MVC 3 Project to ASP.NET MVC 4

中列出的步骤进行操作