【发布时间】:2010-02-09 03:44:56
【问题描述】:
这不是 MVC 主题。
我有一个 ASP.NET 应用程序,它在 Application_Start 方法中执行 URL 路由。
路由看起来像:
RouteTable.Routes.Add(new Route(
"Profile/{query}",
new RouteValueDictionary() { {"query",string.Empty} },
new GenericRouteHandler("~/ProfileHttpHandler.ashx")
));
GenericRouteHandler 看起来实现了 GetHttpHandler 与:
var page= (IHttpHandler)BuildManager.CreateInstanceFromVirtualPath(_virtualPath, typeof(IHttpHandler));
...
return page;
而 ProfileHttpHandler.ashx 只是一个 Visual Studio 模板。它将 Content-type 设置为“text/plain”并写入“hello world”。
在 Visual Studio(在 ASP.NET 开发服务器上)中调试时,此应用程序可以正常工作。 GET http://localhost:59474/Profile/abc123 按预期路由到 http 处理程序。
但是,当此应用发布到以集成管道模式运行 IIS 7 的远程计算机时,该过程将失败。尝试获取应用程序文件夹中的任何内容时出现 HTTP 500 错误,包括 Default.aspx。
Web.Config 是这样配置的:
<system.web>
<httpModules>
<add name="RoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="RoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</modules>
</system.webServer>
最后;我不确定这是否是相关信息。在我的 Web 服务提供商的控制面板中,我将此应用程序所在的目录配置为虚拟目录。 它具有以下属性:
- mydomain.ca/routeapp:您的托管空间中的文件夹 (domain.ca\wwwroot\routeapp)
- 允许匿名访问:开启。
- 启用集成 Windows 身份验证:打开。
- 启用基本身份验证:打开。
- ASP:已禁用。
- ASP.NET:2.0 集成管道。
- PHP:已禁用。
- Perl:已启用。
【问题讨论】:
-
您能从服务器上的事件日志中找出 500 错误是什么吗?
-
我正在与我的提供商合作以尝试获取一些日志。文件系统上最新的日志文件被锁定,我似乎无法访问它。我已经验证 500 错误是对 OP 中描述的应用程序的直接响应。将新的 Web 应用程序发布到虚拟目录让我获得 HTTP 200s。
-
你好。不幸的是,日志文件没有包含足够有用的信息。
-
你可以尝试切换到经典管道模式看看它是否有效吗?
-
经典模式下也不行。我将其更改为集成以直接响应我遇到的错误。
标签: asp.net asp.net-mvc iis iis-7 url-routing