Windows Azure WebRole 中的 WcfWebApi 始终返回 404,但在本地正常

发布于 2024-12-20 08:33:34 字数 1302 浏览 1 评论 0 原文

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

我已使用 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 文件添加到我的 Web 应用程序中的一个文件夹中,再加上所有(可怕的)system.serviceModel 服务等等,这是 REST 风格配置所需的。这一切都有效。

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

I'm stuck on the dreaded "it works locally" issue.

I have used NuGet to install the WcfWebApi into an Azure WebRole.
This is a WebForms website.

Global.asax.cs Application_Start calls RegisterRoutes().

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

The Service's Interface contains:

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

The implementing class just returns "hello", so if I now navigate to: http://localhost:49831/MySvc/TheService/hello - i get "hello" returned. OK.

If I now publish to Azure and try the same url (obviously with xx.cloudapp.net/ etc) I always get a 404.

I have used the WcfWebApi before in the past - but always in a WCfWebRole. Does this make a difference? Why does it work locally? It must be something to do with Azure then?

Any advise appreciated. Thanks.

Edit: well, as per @Rajesh's suggestion I ran Get_HostedServices, which listed the hosted-services urls, eg: https://management.core.windows.net/mysubscriptionId/services/hostedservices/the-nameOfTheApp. Not really sure where this is going...

In utter desperation I added a .svc file to a folder in my web app, plus all the (horrible) system.serviceModel services and so on that one needs for REST style configuration. This all works.

I don't want to close this question though as it's not been answered as such and I am curious as to what has happened. Thanks everyone for responses so far. If I do find an answer I'll update.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

铁轨上的流浪者 2024-12-27 08:33:34

我考虑了您的问题,您可以尝试使用 IIS 或 IIS Express 在本地运行您的应用程序吗? (IIS Express 不能开箱即用,您必须安装它,但与 VS 一起使用更容易)

您提供的 url 让我认为 VS 使用 Cassini(Visual Studio 开发服务器)或 IIS Express。请注意,Cassini 的工作方式与 IIS 并不完全相同,而 IIS Express 则不然。您的 Azure Web 角色将在 IIS 下运行,这可以解释您遇到的不同行为。

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

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

I thought about your issue, Could you try to run your app locally using IIS or IIS Express? (IIS express isn't available out of the box, you must install it, but is easier to use with VS)

The url you provided lead me to think that VS uses either Cassini (Visual Studio Development Server) or IIS express. Be aware that Cassini doesn't work exactly as IIS, whereas IIS Express does. Your Azure web role will run under IIS, which could explain the different behaviors you are experiencing.

Furthermore your url doesn't look like a Windows Azure emulator url (the domain should be something like 127.0.0.1:81 .

I suppose your project is a windows azure project. When testing, are you sure you are starting the Azure project and NOT the web application project?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文