我在 IIS 上遇到了一个问题,它困扰了我很多天。在我搜索了整个网络之后,我仍然找不到正确的答案,所以是时候在 StackOverflow 上发帖寻求帮助了。
我在阿里云上创建了一个 Windows Server 2016 VM,在阿里云上创建了一个 SMB 文件共享。然后我按照这个指令(https://github.com/AlibabaCloudDocs/nas/blob/master/intl.en-US/Best%20Practices/Use%20Windows%20IIS%20and%20NAS%20to%20provide%20Web%20and% 20FTP%20services.md)将我的网站放在文件共享上并将其加载到 IIS。问题是此设置适用于 Windows Server 2012 R2 或更低版本,但是在 Windows Server 2016 上显示 dll 加载失败。错误如下所示:
我尝试了一堆设置
<runtime>
<loadFromRemoteSources enabled="true"/>
</runtime>
并在网上搜索,但没有一个技巧有效。我还尝试使用 Process Monitor 来检查 w3wp.exe 的详细信息,并在 2012 年和 2016 年之间得到了这种差异:
Windows Server 2012 的 w3wp.exe 提供 CreateFile: Success
Windows Server 2016 的 w3wp.exe 提供 CreateFile: Invalid Network Response
2012 年(左)和 2016 年(右)的堆栈比较: 左:2012,成功;右图:2016,无效的网络响应
另一个有趣的事情是 Windows Server 2016 并没有真正为这个 dll 打开请求发送任何 SMB 数据包。
我担心这是 Windows Server 2016 内核的错误。
写完上面所有的话,问题就很清楚了:有谁知道到底发生了什么,有没有解决方案可以在 Windows Server 2016 for IIS 上加载远程 dll?