自定义C#Web服务器无法同时接受ajax调用

自定义C#Web服务器无法同时接受ajax调用,c#,.net,ajax,sockets,C#,.net,Ajax,Sockets,我已经为我正在开发的一个web应用程序编写了一个自定义web服务器,但是,我遇到了一个与.NET套接字有关的奇怪问题 对于网页,服务器工作完全正常,但当对服务器进行ajax调用以执行处理时间较长的功能时,服务器无法接受来自同一会话的另一个ajax调用 过程如下: 在网站上按下一个按钮会导致ajax调用(我的服务器识别到这一点),该调用将执行一个冗长的操作,完成后返回“success” 如果在初始调用返回之前再次按下该按钮,浏览器将对服务器进行相同的调用,但这一次,Socket.Accept()不

我已经为我正在开发的一个web应用程序编写了一个自定义web服务器,但是,我遇到了一个与.NET套接字有关的奇怪问题

对于网页,服务器工作完全正常,但当对服务器进行ajax调用以执行处理时间较长的功能时,服务器无法接受来自同一会话的另一个ajax调用

过程如下:

在网站上按下一个按钮会导致ajax调用(我的服务器识别到这一点),该调用将执行一个冗长的操作,完成后返回“success”

如果在初始调用返回之前再次按下该按钮,浏览器将对服务器进行相同的调用,但这一次,Socket.Accept()不会返回新的Socket,并且没有迹象表明有连接正在等待。(Firebug确实显示了连接尝试)

但是,如果我刷新页面或单击链接加载新页面,它将按预期工作,按钮也将按预期工作(由于操作仍在继续,因此返回失败)

总而言之:如果现有的、相同的ajax调用仍在处理中,Socket.Accept()不会返回新的套接字


我被难住了。。。你知道为什么会这样吗?

好吧,看来答案就在浏览器里。通过在url的末尾添加一个任意的时间参数,使每个请求都是唯一的,它就工作了


无论出于何种原因,浏览器都不会同时发送两个ajax调用。

您正在创建线程池吗?我正在使用线程池是的,但直到服务器实际接受连接,所以线程池甚至还没有发挥作用。听起来好像您的线程模型设置不正确,尽管我必须承认,我以前从未尝试过编写这样的自定义侦听器。为什么不使用IIS来完成此操作?它是专门为这种类型的东西设计的。你是如何创建套接字的?您使用的是
System.Net.Sockets.TcpListener
。典型的用户机器可能没有IIS,我需要一些非常独特的功能。起初我以为这是我的线程模型,但我重新安排了它,使它只在套接字接受连接后启动一个新线程。由于连接从未出现,线程还没有发挥作用。可能是浏览器认为它可能会脱离缓存结果,因此实际上只与服务器进行了一次对话。也许您可以添加一个“expires”标题?耸耸肩这是一个想法,但是为什么第一次呼叫返回时它会再次工作呢?