Windows Azure Web角色中的Wcf Web Api始终返回404,但在本地可以正常使用

时间:2011-12-08 13:55:31

标签: c# azure wcf-web-api

我陷入了可怕的“它在本地工作”的问题。

我使用NuGet将WcfWebApi安装到Azure WebRole中。 这是一个WebForms网站。

Global.asax.cs Application_Start调用RegisterRoutes()。

RegisterRoutes()包含:RouteTable.Routes.Add(new ServiceRoute("MySvc/TheService/", new WebServiceHostFactory(), typeof(Services.TheService)));

服务界面包含:

[OperationContract]
    [WebGet(UriTemplate = "/hello", BodyStyle = WebMessageBodyStyle.Bare)]
    string Hello();

实现类只返回“hello”,所以如果我现在导航到:http://localhost:49831/MySvc/TheService/hello - 我会返回“hello”。行。

如果我现在发布到Azure并尝试使用相同的URL(显然使用xx.cloudapp.net /等),我总是会得到404.

我之前使用过WcfWebApi--但总是在WCfWebRole中。这有什么不同吗?为什么它在本地工作?那一定与Azure有关吗?

任何建议表示赞赏。感谢。

编辑好吧,根据@ Rajesh的建议,我运行了Get_HostedServices,它列出了托管服务网址,例如:https://management.core.windows.net/mysubscriptionId/services/hostedservices/the-nameOfTheApp。不确定这是怎么回事......

我绝望地将一个.svc文件添加到我的网络应用程序中的文件夹中,加上所有(可怕的)system.serviceModel服务等等,需要进行REST样式配置。这一切都有效。

我不想关闭这个问题,因为它没有被这样回答,我很好奇发生了什么。感谢大家到目前为止的回复。如果我确实找到答案,我会更新。

1 个答案:

答案 0 :(得分:0)

我考虑过您的问题,您是否可以尝试使用IIS或IIS Express在本地运行您的应用? (IIS Express无法开箱即用,您必须安装它,但更容易与VS一起使用)

您提供的网址让我认为VS使用Cassini(Visual Studio开发服务器)或IIS express。请注意,Cassini不能完全像IIS一样工作,而IIS Express则可以。您的Azure Web角色将在IIS下运行,这可以解释您遇到的不同行为。

此外,您的网址看起来不像Windows Azure模拟器网址(该网域应该类似于127.0.0.1: 81

我想你的项目是一个windows azure项目。在测试时,您确定要启动Azure项目而不是Web应用程序项目吗?