gpt4 book ai didi

c# - 在 ASP.NET Core 中连接子应用程序

转载 作者:行者123 更新时间:2023-11-30 18:14:03 28 4
gpt4 key购买 nike

我在 asp.net core 2.1 中有两个项目。一个是主 Web 应用程序,另一个是子应用程序。子应用程序大部分是独立的;它只需要来自主应用程序的 cookie。

我正在尝试在我的本地开发环境中设置这两个项目,但都失败了,而且我将来还需要为实时 IIS 部署进行设置。我在同一个 VS 解决方案中有两个 VS 项目。在他们的项目调试设置页面中,我将它们都设置为启动 IISExpress,应用程序 URL 为“http://localhost:44305” '.我尝试将子应用程序设置为“http://localhost:44305/subapp” ' 也是,但是当 vs 运行时,IISExpress 提示该端口已被使用。

我有两个应用程序的网络配置。两者的基本默认值。在子应用程序中,我有额外的行来删除 aspnetcore 处理程序(正如我从搜索中发现的那样)。

<remove name="aspNetCore" />

在子应用程序中,我也尝试在 startup.cs 中添加:

app.UsePathBase("/subapp")

我从这个在 vs 本地运行的设置中得到的结果是,在基本 URL 上,它实际上加载了我的子应用程序而不是我的主应用程序(浏览器 URL 是 localhost:44305)。摆弄多种设置似乎让我无处可去;两个应用都无法完全加载,或者一个或另一个应用无法访问。

是否有任何适当的文档可用于设置多个应用程序以在本地和 IIS 中协同工作?我似乎找到的所有东西都来自 pre-2.0。

感谢您的帮助!

编辑:在部署到 IIS 时,我实际上设法让一个新项目作为子应用程序工作。设置:

  1. 使用两个 aspnetcore 2.1 web 应用程序制作一个新的 VS 解决方案。

  2. 使用以下内容将 web.config 添加到子应用程序:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <system.webServer>
    <handlers>
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\IISTestSubApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
    </configuration>
  3. 主应用没有网络配置。

  4. 将 .UseIISIntegration() 添加到两个应用程序的 Program.cs CreateWebHostBuilder。

  5. 在 Startup.cs Configure 方法中为 Subapp 添加 app.UsePathBase("/subapp/");

  6. 将主应用程序部署到文件夹/Mainapp。将子应用部署到/Mainapp/subapp。

  7. 为主应用设置 iis 网站。

  8. 右键单击 IIS 中的主应用程序网站,然后单击“添加应用程序”。添加具有别名“/Subapp”的子应用程序

这应该就是您所需要的。有些步骤可能不是必需的。我还没有完全测试哪些步骤是 100% 必要的。

不幸的是,我仍然无法让它与 IISExpress 一起工作。我的 .vs/applicationhost.config 文件看起来几乎与 IIS 文件完全一样,但是当同时运行这两个应用程序时,我收到错误消息,指出该端口已在使用中。我仍在尝试很多新事物,所以,我们看看我是否能弄明白。

最佳答案

我现在可以在 IISExpress 中使用它了。首先按照 IIS 的上述步骤进行基本设置,包括以下内容:

  1. IISExpress 的子应用 web.config 文件应如下所示:

    <configuration>
    <system.webServer>
    <handlers>
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\bin\Debug\netcoreapp2.1\IISTestSubApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
    </configuration>
  2. 在您的解决方案的 .vs/config/applicationhost.config 文件中,确保您的网站部分看起来像

    <site name="IISTest" id="2" serverAutoStart="true">
    <application path="/" applicationPool="IISTest AppPool">
    <virtualDirectory path="/" physicalPath="C:\Users\user\Documents\GitHub\IISTest\IISTest" />
    </application>
    <application path="/subapp" applicationPool="IISTest AppPool">
    <virtualDirectory path="/" physicalPath="C:\Users\user\Documents\GitHub\IISTest\IISTestSubApp" />
    </application>
    <bindings>
    <binding protocol="http" bindingInformation="*:44301:localhost" />
    </bindings>
    </site>

这两个应用程序使用不同的应用程序池似乎没问题。由于某种原因,将它们设置为相同会在 vs 运行时被覆盖。

  1. 仅从 vs 运行主应用程序;也不要尝试运行子应用程序。您将收到端口已被占用的错误消息。

关于c# - 在 ASP.NET Core 中连接子应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51372469/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com