本文是接:
《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类,及项目调试》
的最后一篇。
由于整个系列介绍得很详细,篇幅较长,所以分成多篇博文进行叙述。个人建议从第一篇博文开始阅读。
首先,在“控制面板”中找到“程序”,如下图:
进入后,点击“启用或关闭Windows功能”,然后找到“Internet Information Services”,选择你所需要的IIS功能即可。我的选择如下图:
点击确定,即可自动完成安装IIS。
在Windows Server的“服务器管理器中”,选择“添加角色和功能”,如下图:
一路“下一步”,如下图:
然后在“服务器角色”这里,找到“Web服务器(IIS)”,然后勾选所需的功能即可,如下图:
最后点击完成后,Server中就会自动安装IIS的相关功能,如下图:
发布项目,我采用的是Vistual Studio发布到本地文件夹中的方式。
在VS中点击“生成”,然后选择“发布”,如下图:
然后选择“启动”,进入“选取发布目标”页面,选择“文件夹”,如下图:
然后选择“创建配置文件”,点击“编辑”,进入“发布”页后,点击“下一页”,如下图:
最后,选择“配置”为“Release”,选择“目标框架”为“netcoreapp3.0”,选择“部署模式”为“独立”,选择“目标运行时”为“win-64”,并勾选“在发布前删除所有现有文件”,最后点击“保存”即可。如下图:
点击“发布”,VS就会将项目代码以及所有的依赖全部发布到本地文件夹中,如下图:
文件夹下如图:
如果你的IIS文件夹是在自己电脑上,想要部署到远程的Server上的话,就直接把此文件夹复制到Server上即可。
IIS Web Site的运行依赖于应用程序池(Application Pool),所以需要先创建应用程序池。
在IIS管理器中的左侧,选择“应用程序池”,然后选择“添加应用程序池”。接着填项完名称后,记得将“.NET CLR版本”一项选择为“无托管代码”,以及将“托管管道模式”一项选择为“集成”,如下图:
创建好应用程序池后,为了避免IIS Web Site对系统无权限调用等乱七八糟的问题,需要对其使用账户进行额外的设置。
选择创建好的应用程序池,我这里名为“DocReaderServicePool”,点击“高级设置”,找到“进程模型”一栏,然后点击“标识”。弹出新窗口后,选择“自定义账户”,并输入有权限的用户名和密码,如下图:
创建好应用程序池后,开始新建网站。
点击“网站”,选择“添加网站”,然后填写网站名称,以及选择项目发布后的本地的代码和可执行程序的路径。记得还要将网站的应用程序池选择为上一节中所创建的池子(否则IIS会自动创建一个与网站同名的应用程序池),如下图:
然后选择“连接为”,修改为“特定用户”,然后填写有权限的用户名和密码,如下图:
修改了用户之后,最好验证一下,点击“测试设置”,测试连接的结果没有异常即可,如下图:
最后,选择IP地址,并设置一个未被占用的端口号即可,如下图:
点击确定后,网站就创建好了。
但是别着急,你现在直接点击浏览,或者在外网调用网站的接口,肯定是会报错的哈哈。所以耐心点,我们继续进行接下来的配置。
由于程序会调用Office软件的DCOM组件,所以对于DCOM组件的权限我们还需要进行配置。
首先,运行“dcomcnfg”打开组件服务,如下图:
然后在“组件服务”-“计算机”-“我的电脑”-“DCOM配置”下,找到所有Office的DCOM组件,然后挨个右键点击“属性”,将“常规”tab下的“身份验证级别”选择为无,如下图:
然后切换到“安全”tab下,将三项权限全部改为“自定义”,并挨个添加“IIS_IUSRS”用户,然后赋予权限,如下图:
最后切换到“标识”tab下,选择“下列用户”,然后输入用户名密码,如下图:
在Server或者本地的环境中,如果要运行ASP.NET Core的项目,是需要.NET Core Runtime的支持才行(不是SDK,只装SDK是没有用的)。
进入官网下载地址: https://dotnet.microsoft.com/download
然后点击下载并安装.NET Core Runtime,如下图:
安装完成后,在IIS的网站的模块中,如果能查看到AspNetCoreModule,就意味着安装成功了,如下图:
不同于Win10,默认的Windows Server安全性控制等级很高,所以我们还需要调整“Windows防火墙”的相关设置,以允许外网对特定的端口进行访问调用。
在“服务器管理器”的“本地服务器页面”,找到“Windows防火墙”一项,进入后选择“高级设置”,打开“高级安全Windows防火墙”页面,如下图:
(由于我这里只是个demo,方便起见我直接把Server的防火墙给关了~~)
首先,选择“Windows防火墙属性”,找到“IPSec设置”,选择“IPSec免除”,如下图:
然后,点击“入站规则”,选择“新建规则”,规则类型选择为“端口”,然后添加我们新建的IIS Web Site的端口即可,如下图:
至此,所有的项目和环境配置就都完成了。
由于我在自己的Win10电脑上装了IIS,也部署了项目,所以先在Win10上验证下项目的接口好不好使,如下图:
完美!
下述这些问题全都是我亲自经历的,如果能够帮到你,希望能为我的博文点个赞~
在IIS管理器中新建好IIS后,无法启动。
原因可能是网站的连接权限问题,或者应用程序池的配置问题。
请参考本文:
“4.2 新建并配置Web Site(Win10/Server通用)”一节中,将网站的“连接为”修改为“特定用户”的步骤。
以及:
“4.1 新建并配置应用程序池(Win10/Server通用)”一节中,将应用程序池的“.NET CLR版本”一项选择为“无托管代码”,以及将“托管管道模式”一项选择为“集成”的步骤。
IIS网站创建好后,点击浏览网站,浏览器页面报错“HTTP 错误 500.19 - Internal Server Error ”。
这个问题的原因是当前运行环境没有安装AspNetCoreModule。
请参考本文:
“4.4 安装AspNetCoreModule(Win10/Server通用)”这小节的操作步骤。
调用项目的接口并上传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通用)”这小节的操作步骤。
调用项目的接口并上传Excel文件时,接口报错“Microsoft Excel 不能访问文件“E:\workspace\Demo\DocReaderWebAPIDemo_IIS\uploads\5 pages.xls”。 可能的原因有以下几个:\n\n• 文件名称或路径不存在。\n• 文件正被其他程序使用。\n• 您正要保存的工作簿与当前打开的工作簿同名。”
这个问题的原因并不是路径或者读写的问题,它其实也是Office的DCOM的权限配置有问题。
请参考本文:
“4.3 DCOM组件配置(Win10/Server通用)”这小节的操作步骤。
调用项目的接口并上传PPT文件时,接口报错“Insufficient memory to continue the execution of the program.”
这个问题的原因并不是内存不足的问题,它其实也是Office的DCOM的权限配置有问题。
请参考本文:
“4.3 DCOM组件配置(Win10/Server通用)”这小节的操作步骤。
调用项目的接口并上传office系列文件时,接口报错“拒绝访问”。
由于项目的代码中会调用系统的process,然后杀Office的进程等,所以这个问题的原因是IIS没有调用系统process的权限。
请参考本文:
“4.1 新建并配置应用程序池(Win10/Server通用)”这小节的操作步骤,修改应用程序池高级设置-进程模型-标识,选择有权限的用户例如admin。
调用项目的接口并上传office系列文件时,接口报错“8000401a 因为配置标识不正确,系统无法开始服务器进程,请检查用户名和密码”。
这个问题的原因还是Office的DCOM的权限配置有问题。
请参考本文:
“4.3 DCOM组件配置(Win10/Server通用)”这小节的操作步骤。