我昨晚部署了一个ASP.NET MVC应用程序,并发现将IIS7设置为集成模式进行部署的工作量较少.我的问题是有什么区别?使用一个或另一个有什么含义?
我有一个在Windows 8.1,.net 4.5.1,IIS 8.5(在集成AppPool下),Visual Studio 2013上开发的Web应用程序,在默认模板上包含asp.net Identity,Owin等,并且本地工作正常.
然后我将它上传到Windows Server 2008和IIS 7.5(集成管道)主机,我得到:
此操作需要IIS集成管道模式.
异常详细信息: System.PlatformNotSupportedException:此操作需要IIS集成管道模式.
堆栈跟踪:
[PlatformNotSupportedException:此操作需要IIS集成管道模式.] 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,还是服务器2008或我:)?
使用集成管道,所有请求都通过ASP.NET传递,包括图像,CSS.
然而,在传统的管道中,默认情况下只对ASPX页面的请求通过ASP.NET传递.
集成管道会对线程使用产生负面影响吗?
假设我从IIS服务器请求500 MB二进制文件:
对我来说,这有利于传统的管道,因为我希望尽可能多的线程来提供ASPX页面.
我完全不在这里吗?
这个问题一直困扰着我......
在本地Intranet环境中,如果我们想要使用模拟我们的Windows域用户,我们注定要在我们的应用程序池中使用"经典"管道模式,或者是否有一种新的方式来声明性地"运行"它们(可以这么说) )?
我的目标是在我的Intranet上对本地Web应用程序使用Windows身份验证,以便用户可以在其活动目录帐户下进行身份验证和运行应用程序(原则).每次我尝试这个(当然使用NetworkService身份),我都会收到此错误:

谢谢!;)
impersonation windows-authentication integrated-pipeline-mode iis-7.5 windows-server-2008-r2
这是我的环境:Win 7上的IIS7.5,.NET 4,App Pool Integrated
web.config中
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
</configuration>
Run Code Online (Sandbox Code Playgroud)
Test.aspx文件
<%@ Page Language="C#" %>
<!DOCTYPE html>
<script runat="server">
protected void OnAction(object sender, EventArgs e)
{
int count;
status.Text = (int.TryParse(status.Text, out count) ? count + 1 : 0).ToString();
Session["test"] = count;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>IIS Session Hang Test</title>
<script>
var mutiPostback = function () {
var e = document.getElementById('LinkButton1');
e.click();
e.click();
};
</script>
</head>
<body>
<form id="Form1" method="post" runat="server">
<asp:ScriptManager runat="server" ID="SM">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" …Run Code Online (Sandbox Code Playgroud) internet-explorer iis-7 session-state integrated-pipeline-mode
是否可以检查我们的代码是否在集成管道模式下执行?
有一些ASP.NET类属性只能在集成管道模式下工作,如果有办法测试我们的代码是否在该环境中执行,我想避免引发异常.
我的问题类似但不完全相同:
为什么我的主机(softsyshosting.com)不支持BeginRequest和EndRequest事件处理程序?(我也读过其中引用的mvolo博客)
目标是成功地在IHttpModule.Init事件(或模块内部的任何地方)中挂钩HttpApplication.BeginRequest,使用通过system.webServer配置集成的普通HttpModule,即不会:
覆盖HttpApplication(该模块旨在自包含和可重用,所以例如我有这样的配置):
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<remove name="TheHttpModule" />
<add name="TheHttpModule" type="Company.HttpModules.TheHttpModule" preCondition="managedHandler" />
Run Code Online (Sandbox Code Playgroud)到目前为止,我试图将一个监听器附加到HttpApplication.BeginRequest的任何策略都会产生以下两种情况之一:症状1是BeginRequest永远不会触发,或者症状2是所有托管请求都抛出以下异常,我不能从用户代码中捕获并处理它:
Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.PipelineModuleStepContainer.GetEventCount(RequestNotification notification, Boolean isPostEvent) +30
System.Web.PipelineStepManager.ResumeSteps(Exception error) +1112
System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb) +113
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +616
Run Code Online (Sandbox Code Playgroud)
app.BeginRequest += new EventHandler(this.OnBeginRequest)在Init中注释会停止例外.Init根本不引用Context或Request对象.
我试过了:
有人知道一个好方法吗?在模块中挂钩Application_Start是否存在一些间接策略(似乎不太可能)?另一个事件:a)可以从模块的构造函数或Init方法挂钩,以及b)随后是附加BeginRequest事件处理程序的安全位置?
非常感谢
我们已将ASP.NET Web应用程序从IIS6升级到IIS7集成模式.我们的应用使用:
<identity impersonate="true"/>
Run Code Online (Sandbox Code Playgroud)
因此我们不得不设置:
<validation validateIntegratedModeConfiguration="false" />
Run Code Online (Sandbox Code Playgroud)
这是明智的吗?我的直觉说不是,但在谷歌搜索这个问题,这个"解决方法"建议在每个访问过的页面上.
模拟IIS7不再是一个很好的做法,我们应该放弃它并提出不同的解决方案吗?
首先,有一个很好的概述IIS7 HTTP请求生命周期和影响性能的各种设置:
但非常具体,在dotNet 4中,maxConcurrentRequestsPerCPU和requestsQueueLimit的默认值设置为5000.例如,相当于:(在aspnet.config中):
<system.web>
<applicationPool
maxConcurrentRequestsPerCPU="5000"
maxConcurrentThreadsPerCPU="0"
requestQueueLimit="5000" /> (** see note below)
</system.web>
Run Code Online (Sandbox Code Playgroud)
在我看来,在多CPU /核心服务器上,在'perCPU'限制之前,始终会调用requestQueueLimit.因此,如果每个CPU最多需要5000个请求,那么我希望requestQueueLimit需要增加到5000*CPUCount或者只是完全禁用.
我的解释是否正确?如果是这样,我可以禁用requestQueueLimit吗?(将其设为零?).关于此设置的文档似乎没有解决这个问题(所以我可能会遗漏某些内容或误读?)
**上述文章的旁注:requestQueueLimit命名不佳.它实际上限制了ASP.NET可以同时处理的最大请求数.这包括排队的请求和正在执行的请求.如果"请求当前"性能计数器超过requestQueueLimit,则将拒绝新的传入请求,并显示503状态代码)
直到现在我用过:
Dim appPath = HttpContext.Current.Request.MapPath(HttpContext.Current.Request.ApplicationPath)
Run Code Online (Sandbox Code Playgroud)
但今天我将我的应用程序从IIS6移动到IIS7,我得到"请求在此上下文中不可用"异常.这是由于IIS7中的集成模式管道.我不想进入经典模式,所以我正在寻找一种获取应用程序路径的不同方式(即"C:\ SVN\L2E\trunk\Website").
有谁知道如何获得我的MVC3应用程序的完整物理路径?
iis-7 ×8
asp.net ×6
iis ×5
asp.net-2.0 ×1
asp.net-mvc ×1
c# ×1
httpmodule ×1
iis-6 ×1
iis-7.5 ×1
path ×1
pipeline ×1