在IIS上部署(托管).NET Core站点
部署教程
操作系统要求
- Windows 7 或更高版本
- Windows Server 2008 R2 或更高版本
依赖的组件

可以选择.NET Core版本,选择 Runtime & Hosting Bundle 开始下载。
这里一定注意左边的版本标识了Sdk和运行时对应的Asp.NET Core IIS Module等各项版本信息

安装完成后通过在IIS管理台上通过 模块按钮查看,如下图


部署站点
部署方式和部署.NET站点一样(安装IIS和常规的IIS相关组件),只是需要将站点的应用程序池设置.NET CLR版本为 无托管代码,如下图:

接下来重启服务器;
web.config详解
vs发布后的站点文件夹下会带有一个web.config文件。文件格式如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\Test1.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</location>
</configuration>
上面的handlers节点下包含名称aspNetCore,modules=“AspNetCoreModule
”的节点。意思即对应IIS下的AspNetCoreModule HttpModule。 这里不要对其进行改动,保持默认配置即可。
下面的aspNetCore节点内的processPath意思表示该站点需在IIS工作进程内托管,这种模式称之为进程内托管模型。在进程内托管时,该模块会使用 IIS 进程内服务器实现,即 IIS HTTP 服务器 (IISHttpServer)。在IIS托管下使用进程内托管模式比进程外托管模式性能更强。 stdoutLogEnabled属性表示是否开启日志(建议开启),
stdoutLogFile属性表示日志输出目录。
可以在配置文件中新增环境变量,如下:
<aspNetCore processPath="dotnet" arguments=".\MyApp.dll" stdoutLogEnabled="false" stdoutLogFile="\\?\%home%\LogFiles\stdout">
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
<environmentVariable name="CONFIG_DIR" value="f:\application_config" />
</environmentVariables>
</aspNetCore>
ASPNETCORE_ENVIRONMENT变量对应项目的appsettings.json文件读取目录(可读取开发环境Development或生产环境Product)
CONFIG_DIR是我们自定义的一个环境变量,可在站点启动时候读取该变量做相应的逻辑。
注意此配置文件下的环境变量权重高于我们在操作系统下配置的环境变量
常见的部署问题(持续更新)
上面的部署步骤我都走完后,开启站点遇到下面这个错误:

404!!!!!
我还只是默认的webapi啊,代码都是微软自动生成的啊!!!然后查看IIS日志, 如下图


打开IIS日志存放目录,C:\inetpub\logs\LogFiles\W3SVC4打开一看,没问题啊,没有错误日志啊(内心很纠结。。。)。
各种百度、Goolge就是没找到解决办法,一直以为是环境问题,服务器都重启了不下3次
最后自己尝试手动补齐了路由,一看可以了!!!
说到底还是对.NetCore了解不够深入,发布后IIS托管站点后不会对路由默认补齐,所以在项目的launchSettings.json文件里改成一朵花都没用。

默认路由未自动补齐导致404的解决办法:
1、Nuget 安装Microsoft.AspNetCore.Rewrite
2、在启动项目Startup.Configure方法下的app.UseMvc();代码前加入下面代码:
var option = new RewriteOptions();
option.AddRedirect("^$", "swagger"); //swagger为补充的路由
app.UseRewriter(option);
app.UseMvc();·
哎,本来还想部署在Linux上的,结果在IIS上部署都出西西,真的当时都怀疑自己了。
也是在开发经历上遇到的各种问题吧,让我能更深入的去理解问题本质并着手解决。
作者:长沙大鹏
链接:https://www.jianshu.com/p/a03c67feb0bd
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
在IIS上部署(托管).NET Core站点的更多相关文章
- .NET开发框架(五)-IIS上部署ASP.NET Core项目教程
系列教程:从初学者到架构师的一步步蜕变 本篇经验将和大家介绍如何在IIS上部署ASP.NET Core项目,希望对初学.NET CORE的童靴入门有所帮助! 1.打开VS,创建项目,选择ASP.NET ...
- Web Server 在IIS上部署ASP.NET Core项目
在IIS上部署ASP.NET Core项目 一.配置应用程序池为无托管: 二.安装ASPNETCoreModule:(核心) 下载地址:https://go.microsoft.com/fwlink/ ...
- 以self-contained方式在Linux上部署ASP.NET Core站点
今天准备将一个在Windows上用VS2015开发的ASP.NET Core程序部署到阿里云Linux服务器上,部署时发现这台服务器是内网服务器,无法直接安装.NET Core SDK,于是想到尝试用 ...
- 在IIS上部署Asp.Net Core 2.2.0
1. .NET Core与Windows环境 Asp.Net Core 2.2.0 Windows 10 2. 先决条件 下载并安装.Net Core Hosting Bundle. 3. 部署过 ...
- 关于 IIS 上运行 ASP.NET Core 站点的“HTTP 错误 500.19”错误
昨天回答了博问中的一个问题 —— “HTTP 错误 500.19 - Internal Server Error dotnetcore”,今天在这篇随笔中时候事后诸葛亮地小结一下. 服务器是 Wind ...
- IIS 上部署 ASP.NET Core 应用程序
1.下载 .Net Core Runtime 和 Hosting Bundle 下载地址:https://dotnet.microsoft.com/download/dotnet-core 分别下载 ...
- IIS上部署Net.Core
部署: 1.安装vc_redist.x64vc_redist.x64 2.安装DotNetCore.1.0.0.RC2-WindowsHosting 3.安装DotNetCore.1.0.0-SDK. ...
- 在IIS上部署 .Net Core 3.0 项目踩坑实录
在IIS上部署 .Net Core 3.0 项目的主要流程有: 安装并启用IIS 安装AspNetCoreModuleV2 添加.配置网站 设置应用程序池 通过VS发布 一.安装并启用IIS: 安装了 ...
- .NET跨平台之旅:在生产环境中上线第一个运行于Linux上的ASP.NET Core站点
2016年7月10日,我们在生产环境中上线了第一个运行于Linux上的ASP.NET Core站点,这是一个简单的提供后端服务的ASP.NET Core Web API站点. 项目是在Windows上 ...
随机推荐
- Jenkins时间修改为北京时间
jenkins安装后时间一直是utc时间,不太方便. 系统管理->脚本命令行 运行: System.setProperty('org.apache.commons.jelly.tags.fmt. ...
- [一]class 文件浅析 .class文件格式详解 字段方法属性常量池字段 class文件属性表 数据类型 数据结构
前言概述 本文旨在讲解class文件的整体结构信息,阅读本文后应该可以完整的了解class文件的格式以及各个部分的逻辑组成含义 class文件包含了java虚拟机指令集 和 符号表 以及若 ...
- [Luogu4705] 玩游戏
Description 给定两个长度分别为 \(n\) 和 \(m\) 的序列 \(a\) 和 \(b\).要从这两个序列中分别随机一个数,设为 \(a_x,b_y\),定义该次游戏的 \(k\) 次 ...
- web类协议脚本-飞机订票系统示例
以下是LR自带的飞机订票系统的Demo,希望能帮助大家. Action() { int iRand; int iTmp; char *strTmpA; char *strTmpB; char *str ...
- 第35章 秘密(secrets) - Identity Server 4 中文文档(v1.0.0)
在某些情况下,客户端需要使用身份服务器进行身份验证,例如 在令牌端点请求令牌的机密应用程序(也称为客户端) API在内省端点验证引用令牌 为此,您可以将秘密列表分配给客户端或API资源. 秘密解析和验 ...
- 2018.12/17 function 的闭包
1.闭包:函数在调用的时候会形成一个私有的作用域,对内部变量起到保护的作用,这就是闭包. 2.变量销毁: 1.人为销毁 var a=12; a=null 2.自然销毁 函数调用完成之后 浏览器会自 ...
- python爬虫项目(scrapy-redis分布式爬取房天下租房信息)
python爬虫scrapy项目(二) 爬取目标:房天下全国租房信息网站(起始url:http://zu.fang.com/cities.aspx) 爬取内容:城市:名字:出租方式:价格:户型:面积: ...
- Python进阶之函数式编程
函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...
- iOS-----------关于组件化
打一个比较形象的比喻,把APP比作我们的人体,把胳膊.大腿.心.肝.肺这些人体器官比作组件,各个器官分别负责他们各自的功能,但是他们之间也有主次之分,试想我们的胳膊.大腿等是不能独立完成某个任务的 ...
- 新更新,又是一年了。这次记录下关于android版的WeiboDemo的问题
时隔一年多,现在又开始折腾android的代码了.之前看了Learning android,就想看下能否移植到Weibo.然后就下了weibo的代码,代码包里有个实例叫WeiboSDKDemo. 为了 ...