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

时间:2018-07-17 02:38:33

标签: c# iis asp.net-core

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

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

两个应用程序都有一个Web配置。两者的最基本的默认值。在子应用程序中,我有多余的一行来删除aspnetcore处理程序(如我在搜索中发现的那样)。

<remove name="aspNetCore" />

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

app.UsePathBase("/subapp")

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

是否存在用于设置多个应用程序以在本地和IIS中协同工作的适当文档?我似乎发现的所有内容都来自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. 在Program.cs CreateWebHostBuilder中将.UseIISIntegration()添加到两个应用中。

  5. 在用于子应用程序的Startup.cs配置方法中,添加app.UsePathBase("/subapp/");

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

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

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

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

不幸的是,我仍然无法使其与IISExpress一起使用。我的.vs / applicationhost.config文件看起来几乎与IIS完全一样,但是同时运行两个应用程序时,出现错误,指出该端口已在使用中。我仍在尝试一堆新事物,因此,我们将看看是否可以解决。

1 个答案:

答案 0 :(得分:0)

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

  1. 对于IISExpress,subapp的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中的主应用;也不要尝试运行子应用程序。您将收到端口已被占用的错误消息。