【问题标题】:ASP.NET 4.5 application inside of ASP.NET Core app in IISIIS 中 ASP.NET Core 应用程序内的 ASP.NET 4.5 应用程序
【发布时间】:2016-03-16 08:11:29
【问题描述】:

我们有一个针对 dnx-clr-win-x86.1.0.0-rc1-update1 运行的 ASP.NET Core 1.0 RC1 应用程序,并作为单独的网站托管在 IIS 中。这个很好用。

现在我们要向这个 Web 应用程序添加一个“子”应用程序,因此两者都在同一个端口上运行,但子应用程序应该在子路径 /Child 中可用。子应用程序是一个普通的 ASP.NET 4.5 Web API 应用程序。

此设置在 ASP.NET 5 之前运行良好,当时主应用程序也是 ASP.NET 4.5 应用程序。但不幸的是,它在 ASP.NET 5 中失败了。当我们尝试在浏览器中访问子应用程序时,我们得到:

HTTP Error 502.3 - Bad Gateway
There was a connection error while trying to route the request.

Module          httpPlatformHandler
Notification    ExecuteRequestHandler
Handler         httpplatformhandler
Error Code      0x80070002

这与使用 httpPlatformHandler 托管 ASP.NET 5 应用程序的新方法有关吗?如前所述:它适用于主 ASP.NET 5 应用程序,但不适用于子 ASP.NET 4.5 应用程序。 HttpPlatformHandler 1.2 已安装。

【问题讨论】:

  • 在同一级别托管 ASP.NET 4.5 然后利用 URL 重写将其映射到所需位置会更容易。我认为这应该避免并排问题。

标签: asp.net .net iis asp.net-core


【解决方案1】:

是的,httpPlatformHandler 改变了这种行为。

我认为您需要使用 IApplicationBuilder 上的 "Map" 扩展方法来分支 HTTP 请求。因此,例如“Startup”类的“Configure”方法中的这段代码:

            app.MapWhen(context =>
        {
            return context.Request.Query.ContainsKey("branch");
        }, HandleBranch);

然后 HandleBranch 可能看起来像:

        private void HandleBranch(IApplicationBuilder app)
    {
        app.Run(async (context) =>
        {
            await context.Response.WriteAsync("Branch used.");
        });
    }

然后,这将处理其中包含“分支”一词的所有查询字符串。您可以捕获子路径“/Child”。

【讨论】:

  • 谢谢,这是朝着正确方向迈出的一步。我可以写app.Map("/Child", appl => ...); 并执行委托。但我仍然看不到如何将请求代理到子应用程序。
  • context.Response.Redirect("yourpathhere") 不起作用吗?
  • 我试过了。但是我不能将 ASP.NET 4.5 应用程序作为子应用程序运行,而是需要在单独的端口上建立一个单独的网站。然后我也不需要 /Child 路径,因为我可以直接使用单独的 URL。我认为有一种直接的方法可以让 IIS 子应用程序像以前一样工作,但这似乎不是真的。
  • 好吧,我们不要妄下结论。我可能错了。你能打开 httpPlatformHandler 的日志吗?在 wwwroot 的 web.config 中:stdoutLogEnabled="true" stdoutLogFile="..\logs\httpplatform-stdout"
  • 好的。我已启用它并创建了一个日志,但它没有显示任何“特殊”,当我想访问浏览器中的主应用程序时......当我想访问“/Child1”时,它只是什么也没说客户端应用程序的情况 - 仅请求并返回 favicon。
【解决方案2】:

确保您的 ASP.Net 4.5 应用程序使用单独的池并且该池是受管理的。 打开 ASP.Net Core 应用程序的 web.config 并检查“AspNetCoreModule”的名称,默认为“aspNetCore”

在 ASP.Net 4.5 应用程序中打开 web.config 并将以下内容添加到 system.Webserver=>handlers 部分

<configuration>
    <system.webServer>
        <handlers>
            <remove name="aspNetCore"/>
            <!--Your other handlers -->
       </handlers>
    </system.webServer>
</configuration>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 2010-11-19
    • 2021-08-26
    • 1970-01-01
    • 2018-11-30
    • 2018-12-20
    相关资源
    最近更新 更多