我陷入了可怕的“它在本地工作”的问题。
我使用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样式配置。这一切都有效。
我不想关闭这个问题,因为它没有被这样回答,我很好奇发生了什么。感谢大家到目前为止的回复。如果我确实找到答案,我会更新。
答案 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应用程序项目吗?