如何使用PowerShell创建IIS网站以托管.NET Core 2.0应用程序,错误代码0x8007000d。
如何使用PowerShell创建IIS网站以托管.NET Core 2.0应用程序,错误代码0x8007000d。
预期结果:
IIS正确地托管我的应用程序,并且当我访问我的应用程序的URL(例如:blabla/swagger)时,我能够看到描述我的应用程序的Swagger UI界面。
问题:
当我尝试访问我的应用程序时,显示如下错误:
HTTP Error 500.19 - 内部服务器错误 请求的页面无法访问,因为页面的相关配置数据无效。
信息:
我使用.NET Core 2.0构建了一个应用程序,并且通过Visual Studio运行它,由Kestrel进行托管。
然而,我需要将这个应用程序部署到不同的服务器上,由于Kestrel不支持主机名,所以我需要在IIS中进行托管。当我通过Kestrel运行它时,我能够正确访问它,并且通过导航到url/swagger地址,我能够看到描述应用程序的正确Swagger页面。
我的应用程序是从Visual Studio中发布的,这意味着它的发布文件夹中包含应用程序所需的所有dll文件。它被发布为一个依赖框架的应用程序,而不是一个独立的应用程序,但这不应该有影响。
如何复制这个问题:
由于我希望有一天能够在Docker容器中的IIS中进行托管,所以我正在尝试使用PowerShell脚本在IIS中进行托管。我所做的是:
New-Website -Name 'myTestApp' -force -Port 8080 -PhysicalPath 'C:\Users\myUser\Desktop\Docker\PublishOutput' -ApplicationPool 'MyAppPoolTest'
其中C:\Users\myUser\Desktop\Docker\PublishOutput是Visual Studio发布应用程序的路径。提前感谢!
这是Visual Studio在发布时生成的web.config文件:
错误页面如下:
我是否以错误的方式设置了web.config文件?
为了在IIS上托管.NET Core 2.0应用程序,创建IIS网站需要使用PowerShell。然而,在创建过程中可能会遇到错误0x8007000d。下面是解决此问题的原因和解决方法。
问题的解决方法是,系统需要安装dotnet core windows hosting bundle。该捆绑包安装了.NET Core Runtime、.NET Core Library和ASP.NET Core Module。
直接下载链接为.netcore 2.0.6的捆绑包:https://download.microsoft.com/download/8/D/A/8DA04DA7-565B-4372-BBCE-D44C7809A467/DotNetCore.2.0.6-1-WindowsHosting.exe
以上提供的解决方法中提供了相同的文档链接。是的,当你在Google上搜索这个问题时,这个链接也是你找到的第一个结果。不幸的是,你的解决方案中没有列出解决我的问题的关键点。
问题原因:
1. 需要发布网站,并将IIS网站指向发布的文件夹。
2. 应用程序池必须设置为"No Managed code"。
3. 应用程序池身份用户"IIS AppPool\{AppPoolName}"必须对发布的网站文件夹具有读取权限。
解决方法:
1. 发布你的网站,并记住发布的文件夹路径。
2. 打开IIS管理器,找到要托管网站的应用程序池。
3. 右键单击应用程序池,选择"高级设置"。
4. 在"高级设置"对话框中,将"托管管道模式"设置为"无托管代码"。
5. 确认更改并关闭对话框。
6. 找到你的网站在IIS管理器中的位置,并右键单击它。
7. 选择"基本设置"。
8. 在"基本设置"对话框中,将"物理路径"设置为你记住的发布文件夹路径。
9. 确认更改并关闭对话框。
10. 找到应用程序池的身份用户,并为其授予发布的网站文件夹的读取权限。