C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案

C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案

  • 1.前言
  • 2.安装IIS
    • 2.1 Windows 10安装IIS
    • 2.2 Windows Server 2016安装IIS
  • 3.发布项目
  • 4.将项目部署到IIS Web Site上
    • 4.1 新建并配置应用程序池(Win10/Server通用)
    • 4.2 新建并配置Web Site(Win10/Server通用)
    • 4.3 DCOM组件配置(Win10/Server通用)
    • 4.4 安装AspNetCoreModule(Win10/Server通用)
    • 4.5 Windows Server防火墙设置
  • 5.验证IIS Web Site
    • 5.1 验证Windows 10的IIS Web Site
    • 5.2 验证Windows Server 2016的IIS Web Site
  • 6.常见错误及解决方案
    • 6.1 IIS Web Site无法启动
    • 6.2 网页报错“HTTP 错误 500.19 - Internal Server Error ”
    • 6.3 接口报错“Retrieving the COM class factory ... failed ... error:8007005”
    • 6.4 接口报错“Microsoft Excel 不能访问文件...”
    • 6.5 接口报错“Insufficient memory to continue the execution of the program.”
    • 6.6 接口报错“拒绝访问”
    • 6.7 接口报错“8000401a 因为配置标识不正确,系统无法开始服务器进程,请检查用户名和密码”

1.前言

本文是接:
《C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)1 -环境准备及创建项目》
《C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)2 -获取Word的页数》
《C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)3 -获取PPT和PDF的页数》
《C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)4 -获取Excel的页数》
《C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)5 -添加Model类和Controller类,及项目调试》
的最后一篇。
由于整个系列介绍得很详细,篇幅较长,所以分成多篇博文进行叙述。个人建议从第一篇博文开始阅读。

2.安装IIS

2.1 Windows 10安装IIS

首先,在“控制面板”中找到“程序”,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第1张图片
进入后,点击“启用或关闭Windows功能”,然后找到“Internet Information Services”,选择你所需要的IIS功能即可。我的选择如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第2张图片
点击确定,即可自动完成安装IIS。

2.2 Windows Server 2016安装IIS

在Windows Server的“服务器管理器中”,选择“添加角色和功能”,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第3张图片
一路“下一步”,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第4张图片
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第5张图片
然后在“服务器角色”这里,找到“Web服务器(IIS)”,然后勾选所需的功能即可,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第6张图片
最后点击完成后,Server中就会自动安装IIS的相关功能,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第7张图片

3.发布项目

发布项目,我采用的是Vistual Studio发布到本地文件夹中的方式。

在VS中点击“生成”,然后选择“发布”,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第8张图片
然后选择“启动”,进入“选取发布目标”页面,选择“文件夹”,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第9张图片
然后选择“创建配置文件”,点击“编辑”,进入“发布”页后,点击“下一页”,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第10张图片
最后,选择“配置”为“Release”,选择“目标框架”为“netcoreapp3.0”,选择“部署模式”为“独立”,选择“目标运行时”为“win-64”,并勾选“在发布前删除所有现有文件”,最后点击“保存”即可。如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第11张图片
点击“发布”,VS就会将项目代码以及所有的依赖全部发布到本地文件夹中,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第12张图片
文件夹下如图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第13张图片
如果你的IIS文件夹是在自己电脑上,想要部署到远程的Server上的话,就直接把此文件夹复制到Server上即可。

4.将项目部署到IIS Web Site上

4.1 新建并配置应用程序池(Win10/Server通用)

IIS Web Site的运行依赖于应用程序池(Application Pool),所以需要先创建应用程序池。

在IIS管理器中的左侧,选择“应用程序池”,然后选择“添加应用程序池”。接着填项完名称后,记得将“.NET CLR版本”一项选择为“无托管代码”,以及将“托管管道模式”一项选择为“集成”,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第14张图片
创建好应用程序池后,为了避免IIS Web Site对系统无权限调用等乱七八糟的问题,需要对其使用账户进行额外的设置。

选择创建好的应用程序池,我这里名为“DocReaderServicePool”,点击“高级设置”,找到“进程模型”一栏,然后点击“标识”。弹出新窗口后,选择“自定义账户”,并输入有权限的用户名和密码,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第15张图片

4.2 新建并配置Web Site(Win10/Server通用)

创建好应用程序池后,开始新建网站。

点击“网站”,选择“添加网站”,然后填写网站名称,以及选择项目发布后的本地的代码和可执行程序的路径。记得还要将网站的应用程序池选择为上一节中所创建的池子(否则IIS会自动创建一个与网站同名的应用程序池),如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第16张图片
然后选择“连接为”,修改为“特定用户”,然后填写有权限的用户名和密码,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第17张图片
修改了用户之后,最好验证一下,点击“测试设置”,测试连接的结果没有异常即可,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第18张图片
最后,选择IP地址,并设置一个未被占用的端口号即可,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第19张图片
点击确定后,网站就创建好了。

但是别着急,你现在直接点击浏览,或者在外网调用网站的接口,肯定是会报错的哈哈。所以耐心点,我们继续进行接下来的配置。

4.3 DCOM组件配置(Win10/Server通用)

由于程序会调用Office软件的DCOM组件,所以对于DCOM组件的权限我们还需要进行配置。

首先,运行“dcomcnfg”打开组件服务,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第20张图片
然后在“组件服务”-“计算机”-“我的电脑”-“DCOM配置”下,找到所有Office的DCOM组件,然后挨个右键点击“属性”,将“常规”tab下的“身份验证级别”选择为无,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第21张图片
然后切换到“安全”tab下,将三项权限全部改为“自定义”,并挨个添加“IIS_IUSRS”用户,然后赋予权限,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第22张图片
最后切换到“标识”tab下,选择“下列用户”,然后输入用户名密码,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第23张图片

4.4 安装AspNetCoreModule(Win10/Server通用)

在Server或者本地的环境中,如果要运行ASP.NET Core的项目,是需要.NET Core Runtime的支持才行(不是SDK,只装SDK是没有用的)。

进入官网下载地址: https://dotnet.microsoft.com/download
然后点击下载并安装.NET Core Runtime,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第24张图片
安装完成后,在IIS的网站的模块中,如果能查看到AspNetCoreModule,就意味着安装成功了,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第25张图片

4.5 Windows Server防火墙设置

不同于Win10,默认的Windows Server安全性控制等级很高,所以我们还需要调整“Windows防火墙”的相关设置,以允许外网对特定的端口进行访问调用。
在“服务器管理器”的“本地服务器页面”,找到“Windows防火墙”一项,进入后选择“高级设置”,打开“高级安全Windows防火墙”页面,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第26张图片
(由于我这里只是个demo,方便起见我直接把Server的防火墙给关了~~)

首先,选择“Windows防火墙属性”,找到“IPSec设置”,选择“IPSec免除”,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第27张图片
然后,点击“入站规则”,选择“新建规则”,规则类型选择为“端口”,然后添加我们新建的IIS Web Site的端口即可,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第28张图片
至此,所有的项目和环境配置就都完成了。
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第29张图片

5.验证IIS Web Site

5.1 验证Windows 10的IIS Web Site

由于我在自己的Win10电脑上装了IIS,也部署了项目,所以先在Win10上验证下项目的接口好不好使,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第30张图片
完美!

5.2 验证Windows Server 2016的IIS Web Site

然后测试下服务器上的接口,如下图:
C#编写ASP.NET Core的Web API并部署到IIS上的详细教程(API用于准确获取Word/Excel/PPT/PDF的页数)6 -将项目部署到IIS,及常见错误解决方案_第31张图片
完美!

6.常见错误及解决方案

下述这些问题全都是我亲自经历的,如果能够帮到你,希望能为我的博文点个赞~

6.1 IIS Web Site无法启动

在IIS管理器中新建好IIS后,无法启动。

原因可能是网站的连接权限问题,或者应用程序池的配置问题。

请参考本文:
4.2 新建并配置Web Site(Win10/Server通用)”一节中,将网站的“连接为”修改为“特定用户”的步骤。
以及:
4.1 新建并配置应用程序池(Win10/Server通用)”一节中,将应用程序池的“.NET CLR版本”一项选择为“无托管代码”,以及将“托管管道模式”一项选择为“集成”的步骤。

6.2 网页报错“HTTP 错误 500.19 - Internal Server Error ”

IIS网站创建好后,点击浏览网站,浏览器页面报错“HTTP 错误 500.19 - Internal Server Error ”。

这个问题的原因是当前运行环境没有安装AspNetCoreModule。

请参考本文:
4.4 安装AspNetCoreModule(Win10/Server通用)”这小节的操作步骤。

6.3 接口报错“Retrieving the COM class factory … failed … error:8007005”

调用项目的接口并上传office系列文件时,接口报错“Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80070005 拒绝访问”。

这个问题的原因是Office的DCOM的权限配置有问题。

请参考本文:
4.3 DCOM组件配置(Win10/Server通用)”这小节的操作步骤。

6.4 接口报错“Microsoft Excel 不能访问文件…”

调用项目的接口并上传Excel文件时,接口报错“Microsoft Excel 不能访问文件“E:\workspace\Demo\DocReaderWebAPIDemo_IIS\uploads\5 pages.xls”。 可能的原因有以下几个:\n\n• 文件名称或路径不存在。\n• 文件正被其他程序使用。\n• 您正要保存的工作簿与当前打开的工作簿同名。”

这个问题的原因并不是路径或者读写的问题,它其实也是Office的DCOM的权限配置有问题。

请参考本文:
4.3 DCOM组件配置(Win10/Server通用)”这小节的操作步骤。

6.5 接口报错“Insufficient memory to continue the execution of the program.”

调用项目的接口并上传PPT文件时,接口报错“Insufficient memory to continue the execution of the program.”

这个问题的原因并不是内存不足的问题,它其实也是Office的DCOM的权限配置有问题。

请参考本文:
4.3 DCOM组件配置(Win10/Server通用)”这小节的操作步骤。

6.6 接口报错“拒绝访问”

调用项目的接口并上传office系列文件时,接口报错“拒绝访问”。

由于项目的代码中会调用系统的process,然后杀Office的进程等,所以这个问题的原因是IIS没有调用系统process的权限。

请参考本文:
4.1 新建并配置应用程序池(Win10/Server通用)”这小节的操作步骤,修改应用程序池高级设置-进程模型-标识,选择有权限的用户例如admin。

6.7 接口报错“8000401a 因为配置标识不正确,系统无法开始服务器进程,请检查用户名和密码”

调用项目的接口并上传office系列文件时,接口报错“8000401a 因为配置标识不正确,系统无法开始服务器进程,请检查用户名和密码”。

这个问题的原因还是Office的DCOM的权限配置有问题。

请参考本文:
4.3 DCOM组件配置(Win10/Server通用)”这小节的操作步骤。

你可能感兴趣的:(C#,.NET)