我是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控制器则不会。
我唯一的另一个想法是它可能与回复的大小有关?除了呼叫公司服务的单元测试之外,所有“成功”都有非常小的回复?
答案 0 :(得分:0)
微软推荐的将MVC3升级到MVC4站点的方法是从一个全新的MVC4站点开始,迁移你的视图,控制器和放大器。代码结束。因此,我认为您的升级步骤可能是您的问题的一部分,因为您可以在您创建的新MVC4站点中使用它。如果您需要手动升级现有网站,我会按照Upgrading ASP.NET MVC 3 Project to ASP.NET MVC 4
中列出的步骤进行操作