C# IIS停止响应请求,直到运行此方法后重新启动

C# IIS停止响应请求,直到运行此方法后重新启动,c#,asp.net,httpwebrequest,c#-2.0,system.net.httpwebrequest,C#,Asp.net,Httpwebrequest,C# 2.0,System.net.httpwebrequest,我试图使用此代码从保留会话的处理程序调用处理程序,但在我通过ajax调用它之后,IIS将不会响应任何其他请求,直到重新启动,我无法找出原因 我只限于.NET2.0 我试图在谷歌上找到类似的问题,但我没有发现任何有用的东西,只有一些东西需要寻找,比如使用后的关闭响应和阅读器。。我是不是忽略了什么 public void方法(){ 字符串url=string.Format(“OtherHandler.ashx”); ascienceoding编码器=新的ascienceoding(); string

我试图使用此代码从保留会话的处理程序调用处理程序,但在我通过ajax调用它之后,IIS将不会响应任何其他请求,直到重新启动,我无法找出原因

我只限于.NET2.0

我试图在谷歌上找到类似的问题,但我没有发现任何有用的东西,只有一些东西需要寻找,比如使用后的关闭响应和阅读器。。我是不是忽略了什么

public void方法(){
字符串url=string.Format(“OtherHandler.ashx”);
ascienceoding编码器=新的ascienceoding();
stringpoststring=string.Format(“field1={0}&field2={1}”、“a”、“b”);
byte[]data=encoder.GetBytes(poststring);//一个json对象,或xml,无论什么。。。
CookieContainer CookieContainer=新CookieContainer();
HttpCookieCollection httpCookies=HttpContext.Current.Request.Cookies;
对于(int j=0;j

我希望能够使用POST方法从另一个处理程序调用一个处理程序中的函数,并发送几个变量参数(name=value,就像forms、ajax或GET url所做的那样)并在使用第一个处理程序上下文中我有权访问的同一会话时从它那里获得一些响应。在.net 2 C#代码中的会话以同步方式进行,而不必担心它会挂起原始请求以外的所有请求(直到解决为止)。

默认情况下,
Asp.net
只允许每个
会话有一个并发请求。因此,如果您有一个正在运行的请求,并且在该请求期间您试图在同一会话中运行另一个请求,那么您实际上是在死锁自己

您可以通过将两个处理程序声明为只需要对会话进行读取访问来解决这个问题。这可以通过让处理程序实现
IReadOnlySessionState
而不是
irequiresessionstate
来实现。当然,可能的缺点是处理程序无权存储/更新会话,但好处是可以并行运行多个请求


您也可以通过不使用web请求从第一个处理程序调用第二个处理程序来解决此问题。相反,请确保其他处理程序用于执行其任务的代码可以直接从第一个处理程序调用。这将是一个更好的选择,因为您消除了打开连接、发送请求和接收响应的开销。

哦,我没有想到这可能是一个问题,但这很有意义,感谢您提供的信息-我可以有两个后续问题吗?-如果每个会话不能有两个并发请求,它如何同时处理两个ajax调用?(这可能很难实现,但我不认为这是不可能的情况),-我需要两个处理程序中的IRADonlySessionState,还是一个就足够了。。。我同意将代码移动到appcode将是一个更清晰的解决方案,但它的公司项目和我不能更改第二个处理程序或添加到appcode,因为还有其他问题/策略sadly@astromedia我认为,您需要使两个处理程序都实现
IReadOnlySessionState
。但不是100%确定。如果您使用AJAX调用两个处理程序,那么将首先执行一个调用,然后执行第二个调用。这是在两个处理程序中都使用正常会话状态的假设下进行的。Ups,我想我知道第一个问题的答案-它等待(ajax可能会有相同的行为)-并且因为第二个等待第一个完成,第一个需要第二个完成,所以我想会导致死锁。。。对不起,早上好:)