将WebAPI(aspnetcore 2)部署到IIS

时间:2018-03-19 01:33:10

标签: c# asp.net-web-api2

希望有人能发现我做错的事情。我有一个解决方案(VS2017和.Net Core 2),它包含一个MVC DLL和一个WebAPI DLL。这些在IISExpress上本地工作正常,我可以启动它们(通过多个启动项目)并让它们相互通信(localhost:5000& localhost:7902)。

我已准备好部署到DEV服务器(我们的dev staging服务器)并在VSTS上创建构建步骤。构建顺利,然后创建了部署定义(再次在VSTS上)。 MVC应用程序运行良好(使用https绑定主机名)。但是,这就是问题所在,WebAPI也已成功部署,但IIS无法启动它。我可以使用CLI(dotnet Jbssa.MasterData.Api.DLL)在服务器上本地运行它,它工作正常。但是使用https绑定甚至不会尝试启动服务器。

我检查了webconfig,看起来是正确的(与MVC版本相比)。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\Jbssa.MasterData.Api.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
  </system.webServer>
</configuration>

两个站点(https,443,主机名和证书)的绑定配置完全相同,期望主机名masterdataapi-dev.jbssa.com.au vs masterdata-dev.jbssa.com.au(这些是内部应用程序和没有暴露在互联网上。 我们使用Swagger / Swashbuckle来记录API,这个页面只返回404。

我甚至不知道从哪里开始寻找或需要帮助的其他信息。就好像IIS甚至无法识别API站点并且不会在web.config中运行处理程序。我需要API作为一个完整的站点,因为许多客户端(web和胖客户端)都将访问它。一旦我们弄清楚它为何不能开始,它将成为众之一。

我添加了Serilog日志记录,它通常输出一个&#34;起始主机&#34;作为第一个语句,但它没有显示,实际上没有创建日志文件。

 public static int Main(string[] args)
        {
            Log.Logger = new LoggerConfiguration()
                .ReadFrom.Configuration(Configuration)
                .Enrich.FromLogContext()
                .WriteTo.Console()
                .CreateLogger();

            try
            {
                Log.Information("Starting host");

                var host = BuildWebHost(args);

                host.Run();
                return 0;
            }
            catch(Exception ex)
            {
                Log.Fatal(ex, "Host terminated unexpectedly");
                return 1;
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }

通过IIS Express或CLI运行时会创建日志文件。

修改 请注意,其他核心1.1和2.0站点在服务器上运行良好,这是我们部署的第一个API,因此没有#34; Home&#34;登录页面或wwwroot文件夹。不确定这与它有什么关系。 编辑: 对不起404.这是结果的图像。无法看到响应代码: response image

1 个答案:

答案 0 :(得分:0)

此问题原来是服务器上缺少的CNAME条目。添加后,API开始按设计工作。