一.为啥要有网络站点
我们在本地编写好网站程序,如何让别人也能访问到你编写好的网页呢?
此时就需要我们有个专属的容器来承接住,并且能让别人进行访问。
接下来就是我们的重点IIS部署网站站点
二.需要做的准备工作
1.安装IIS(Internet Information Services ( IIS,互联网信息服务 ))
路径:
控制面板\所有控制面板项\程序和功能,右侧的启用或关闭window功能,勾选上Internet Information Services文件夹下的页面如下:
1
2
3
Microsoft.NET Framework 3.5.1 也选择。
注意:
当安装IIS时,没勾选上"Internet Information Services-》万维网服务-》运行状况和诊断"时,部署的网站站点会少掉日志文件显示,如下图:
找到日志之后点击打开,会出现下面的图片信息,这里面就有IIS日志
一般情况下IIS日志在C:\inetpub\logs
2.启动站点的必要条件
接口想要真正的启动成功,需要iis上有能运行接口的插件(依赖的组件)-》dotnet-hosting,但是由于接口用的.net 版本不同,故也需要安装不同的dotnet-hosting。
hotnet-hosting下载连接:
(https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/runtime-aspnetcore-5.0.17-windows-hosting-bundle-installer)
装dotnet-hosting成功后,通过在IIS管理台上通过 模块按钮查看,如下图
点击模块后,可以看到下方这个页面
三.部署站点
部署方式和部署.NET站点一样(安装IIS和常规的IIS相关组件),只是需要将站点的应用程序池设置.NET CLR版本为 无托管代码,如下图:
接下来需要重启一下服务器,重新加载刚配置好的信息。
注:运行不同的.net API,需要安装不同的IIS插件(dotnet-hosting)。如API是.net 5.0的,就需要安装dotnet-hosting为5.0版本的;
API是.net 6.0的,就需要安装dotnet-hosting为6.0版本的;。
四.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>
1
2
3
4
5
6
7
8
9
10
11
上面的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>
1
2
3
4
5
6
7
ASPNETCORE_ENVIRONMENT变量对应项目的appsettings.json文件读取目录(可读取开发环境Development或生产环境Product)
CONFIG_DIR是我们自定义的一个环境变量,可在站点启动时候读取该变量做相应的逻辑。
注意此配置文件下的环境变量权重高于我们在操作系统下配置的环境变量
官网说明:https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/index?view=aspnetcore-2.1#sub-applications
常见的部署问题(持续更新)
上面的部署步骤我都走完后,开启站点遇到下面这个错误:
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();代码前加入下面代码:
3.自己要把接口后面的参数请求不全
var option = new RewriteOptions();
option.AddRedirect("^$", "swagger"); //swagger为补充的路由
app.UseRewriter(option);
app.UseMvc();·
1
2
3
4
5
注:webconfig讲解部分来源于 https://www.jianshu.com/p/a03c67feb0bd
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_45025876/article/details/133775482