62

我在 Windows 8.1、.NET 4.5.1、IIS 8.5(在 Integrated AppPool 下)、Visual Studio 2013 上开发了一个 Web 应用程序,默认模板包括 ASP.NET Identity、Owin 等,并且在本地运行良好。

然后我使用 IIS 7.5(集成管道)主机将它上传到 Windows Server 2008,我得到:

此操作需要 IIS 集成管道模式。

异常详细信息:
System.PlatformNotSupportedException:此操作需要 IIS 集成管道模式。

堆栈跟踪:

[PlatformNotSupportedException: This operation requires IIS integrated pipeline mode.]
  System.Web.HttpResponse.get_Headers() +9687046
  System.Web.HttpResponseWrapper.get_Headers() +9
  Microsoft.Owin.Host.SystemWeb.OwinCallContext.CreateEnvironment() +309
  Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.GetInitialEnvironment(HttpApplication application) +246
  Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.PrepareInitialContext(HttpApplication application) +15
  Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContextStage.BeginEvent(Object sender, EventArgs e, AsyncCallback cb, Object extradata) +265
  System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +285
  System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

除了指导读者将管道从经典模式更改为集成模式外,我找不到任何东西,我已经这样做了,但没有成功。

我能做些什么来解决这个问题?“Microsoft.Owin.Host.SystemWeb”不喜欢 IIS 7.5 吗?

4

11 回答 11

62

您的应用程序池处于经典模式,但您的应用程序需要集成模式才能触发。将其更改为集成模式:

  1. 打开 IIS 管理器

  2. 应用程序池

  3. 选择您的应用程序在其中运行的池

  4. 在右侧面板中选择基本设置

  5. 管理管道模式更改为集成

于 2014-04-10T04:50:18.513 回答
53

尝试使用Response.AddHeader而不是Response.Headers.Add()

于 2014-09-01T17:08:01.657 回答
32

我遇到了同样的问题,我通过以下方式解决了它:

  1. 在 Visual Studio 中,选择“项目属性”。

  2. 选择“网络”选项卡。

  3. 选择“使用本地 IIS Web 服务器”。

  4. 勾选“使用 IIS Express”

于 2015-05-17T04:40:56.477 回答
9

此错误表示您部署的应用程序所属的应用程序池未处于集成模式。

  1. 创建一个新的应用程序池,选择 .NET 4 版本,托管管道模式为Integrated
  2. 将您的应用程序的应用程序池更改为上面创建的应用程序池,然后立即尝试。
于 2016-07-21T17:36:37.800 回答
6

这是一个奇怪的问题,因为我的主机 IIS 在它已经处于该模式时不应抱怨它需要集成管道模式,正如我在问题中所说的那样:

我进行了很多搜索,除了指导读者将管道从经典模式更改为集成模式外,我没有找到任何东西,而我已经没有运气了..

使用Levi's 的指示,我将<%: System.Web.Hosting.HttpRuntime.UsingIntegratedPipeline %><%: System.Web.Hosting.HttpRuntime.IISVersion %>* 放在一个空的 aspx 页面上,并告诉我的主人发生了什么,并要求他们解决问题并使用我上传的页面确认问题......我经常检查状态是否发生了变化页面,我可以看到他们努力了 3-4 个小时来解决它......

当我问他们为解决问题做了什么时,他们的回答有点“机密”,因为他们说:

我们的团队在服务器上进行了必要的更改

问题都出在我的主人身上。

*更新: 正如在评论中所说

  1. <%: System.Web.Hosting.HttpRuntime.UsingIntegratedPipeline %>
  2. <%: System.Web.Hosting.HttpRuntime.IISVersion %>

不再有效,现在是:

  1. <%: System.Web.HttpRuntime.UsingIntegratedPipeline %>
  2. <%: System.Web.HttpRuntime.IISVersion %>
于 2014-04-12T17:19:47.820 回答
6

解决此问题的方法不在 IIS 中。我试图在 Visual Studio 的 IIS Express 中运行我的应用程序。我在网上搜索了一些文章,说要在 system.web 标签中添加一个身份标签。这不是正确的方法。

我能够解决此问题的方法是单击项目文件并转到属性。在托管管道下,我将属性值从经典更改为集成。

这解决了我的问题。

于 2014-08-17T22:56:27.260 回答
4

我通过以下步骤解决了这个问题:

  1. 右键单击项目的根文件夹。
  2. 转到属性
  3. 点击左侧菜单中的网页
  4. 更改当前端口http://localhost:####/
  5. 点击创建虚拟目录
  6. 保存更改 (ctrl+s)

可能对你有帮助。

于 2015-01-23T08:33:07.020 回答
4

对于Visual Studio 2012,在调试该错误时

网站菜单 -> 使用 IIS Express为我做了

于 2015-09-30T09:53:25.687 回答
3

使用VS2012的人

转到项目 > 属性 > Web

勾选使用本地 IIS Web 服务器

检查使用 IIS Express

项目网址http://localhost:PORT/

于 2016-01-02T13:25:24.790 回答
1

在您的项目中按 F4 以显示属性窗口。然后改变管道模式

在此处输入图像描述

于 2020-11-12T12:53:18.567 回答
1

GitHub解决方案通过添加为我解决了这个问题

  • Global.asax.cs:设置 AntiForgeryConfig.SuppressXFrameOptionsHeader = true; 在 Application_Start 中:
  • 在 Application_BeginRequest 中手动添加 X-Frame-Options 标头
于 2019-01-09T15:46:35.927 回答