通过安装和配置AD域解决Windows Server 2016的IIS无法加载SMB文件卷文件的问题
1. 问题描述
通过客户反馈我们发现Windows Server 2016的IIS无法加载SMB文件卷的文件,显示的错误是:
未能加载文件或程序集“Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。指定的服务器无法运行请求的操作。 (异常来自 HRESULT:0x8007003A)
表现形式类似于下面这个截图:
图1:指定的服务器无法运行请求的操作 (异常来自 HRESULT:0x8007003A)
经过实验我们发现该问题是Windows Server 2016独有的问题,在Windows Server 2012以及2008R2上都没有出现DLL加载错误。这个问题也与阿里云SMB服务无关,用Windows Server 2016挂载另一台机器的文件卷也同样出现加载问题。
经过我们不断研究和实验,发现在安装和配置好AD域之后,2016上IIS加载文件卷文件发生错误的问题可以得到解决。接下来我们就详细介绍一下如何在Windows Server 2016上安装和配置Active Directory服务。
2. 在Windows Server 2016上安装和配置Active Directory服务
2.1. 安装Active Directory域服务和DNS服务器
进入服务器管理器,选择 管理->添加角色和功能->基于角色或基于功能的安装->从服务器池中选择服务器->勾选 Active Directory 域服务 和 DNS 服务器->按几次下一步直到确认安装。
图2.1.4:选择 Active Directory 域服务 和 DNS 服务器
2.2. 配置Active Directory域服务
下面给出最简单的Active Directory域服务的配置方式。在本机生成域并且将本机加入域。域内只有一台机器。
- 在 服务器管理器 的左边栏点击 AD DS,在右上角点击 更多;
- 在 所有服务器 任务详细信息 中点击 将此服务器提升为域控制器;
- 在 Active Directory 域服务配置向导 的选择部署操作时选择 添加新林 ,并且指定根域名(比如iis-test-2016.com);
- 给 目录服务还原模式(DSRM) 键入密码,点击下一步;
- DNS选项 点击下一步;
- 其他选项 点击下一步;
- 路径 点击下一步;
- 查看选项 点击下一步;
- 先决条件检查 点击安装;
- 安装完成会提示需要重启;
- 重新登陆时会提示 请等候Group Policy Client;
- 安装完成之后进入到 控制面板->所有控制面板项->系统,即可看到 域 已经设置成了 iis-test-2016.com;
- 再次打开出现加载问题的网站,问题解决。
图2.2.2:在 所有服务器 任务详细信息 中点击 将此服务器提升为域控制器
图2.2.3:在 Active Directory 域服务配置向导 的选择部署操作时选择 添加新林 ,并且指定根域名(比如iis-test-2016.com)
图2.2.4:给 目录服务还原模式(DSRM)键入密码,点击下一步
图2.2.11:重新登陆时会提示 请等候Group Policy Client
图2.2.12:在 控制面板->所有控制面板项->系统,即可看到 域 已经设置成了 iis-test-2016.com
2.3. 其他问题
如果用户已经有了DNS域名,注意这个Windows Server 2016使用的DNS作为内部使用的DNS,不要与用户外部用的DNS重名,否则会引发DNS解析错误导致用户外部服务不可用。
如果在操作过程中发生了其他的IIS错误,请参考《IIS服务在阿里云NAS上的最佳实践》。
3. 附录
3.1. Windows IIS服务挂载NAS共享文件存储
https://help.aliyun.com/document_detail/54986.html
3.2. IIS服务在阿里云NAS上的最佳实践
https://yq.aliyun.com/articles/692462
3.3. Windows Server 2016加载dll错误
https://stackoverflow.com/questions/54245000/windows-server-2016-iis-hosted-website-failed-to-load-dll-on-a-remote-file-share