Asp.net AJAX调用未启动IIS工作进程?

Asp.net AJAX调用未启动IIS工作进程?,asp.net,.net-3.5,jquery,iis-6,asmx,Asp.net,.net 3.5,Jquery,Iis 6,Asmx,首先,我不是IIS配置方面的专家 说到这里,我得到了一个用VB.NET3.5Web表单编写的网站。我有一个小的web服务,ASMX,作为这个网站的一部分运行。网站上的一个页面使用AJAX调用web服务(jQuery$.AJAX函数,post)。服务器正在运行Windows 2003和IIS 6.0。网站和web服务共享同一个应用程序池 在IIS应用程序池属性中,有一个设置“空闲超时”,表示“空闲N(时间单位为分钟)”后关闭工作进程”。问题是,当工作进程在N分钟后关闭时,页面中的任何AJAX调用都

首先,我不是IIS配置方面的专家

说到这里,我得到了一个用VB.NET3.5Web表单编写的网站。我有一个小的web服务,ASMX,作为这个网站的一部分运行。网站上的一个页面使用AJAX调用web服务(jQuery$.AJAX函数,post)。服务器正在运行Windows 2003和IIS 6.0。网站和web服务共享同一个应用程序池

在IIS应用程序池属性中,有一个设置“空闲超时”,表示“空闲N(时间单位为分钟)”后关闭工作进程”。问题是,当工作进程在N分钟后关闭时,页面中的任何AJAX调用都不会再次启动它。在这种情况下该怎么办?我以前只在AJAX方面处理过.NETMVC,我从未见过这样的事情

日志中没有错误。以下是服务器通过XmlHttpRequest返回的内容:

就绪状态:4

现状:500

状态文本:内部服务器错误

Xhr消息:未定义

响应文本:{“消息”:“有 处理请求时出错。“, “StackTrace”:“”“ExceptionType”:“”}

我被告知将关机值设置为一个大的数字,比如24小时,可以解决这个问题。。。我想会的,但对我来说,这似乎不是一个合适的解决方案。非常感谢您的建议。谢谢大家!

编辑: 这是JavaScript$.ajax调用。我不确定这是否会有什么不同

  $.ajax({
    type: "POST",
    url: "MyWebService.asmx/GetRecordsExceedingMessage",
    data: '{}',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(result) {
      LMM.Operative_CheckError(result);  //display Records Exceeding Message as validation error
    },
    error: function(xhr, status) {
      LMM.Operative_DisplayClientErrors(xhr);
    }
  });
编辑: 我刚刚想起了网站Web.config中的这一小段:

<webServices>
  <protocols>
    <remove name="HttpGet"/>
    <remove name="HttpPost"/>
    <remove name="HttpPostLocalhost"/>
    <remove name="Documentation"/>
    <remove name="AnyHttpSoap"/>
  </protocols>
</webServices>


请参阅以下类似帖子,其中提到如何完全关闭空闲超时:。或者你可以像你说的那样设置超时,或者你可以作弊并在服务器上编写一个windows服务,每隔几分钟向站点发出一次请求

MyWebService.asmx/GetRecordsExceedingMessage实际上是访问asmx的正确方式吗?如果您手动获取该url,它会启动worker吗?也可能是处理程序只处理特定的内容类型,因此应用程序/json不会触发它

我猜您的处理程序映射不起作用,因此IIS会出错,并且永远不会启动您的应用程序池。尝试激活IIS的详细错误,我知道您可以为IIS7及以后的版本执行此操作,但不确定如何在IIS6中执行此操作,这可能会有所帮助:

在“IIS控制面板”中选择“网站”,右键单击“属性”,然后选择“自定义错误”选项卡

现在选择所有自定义页面(单击顶部页面,按shift键并单击底部页面),然后单击设置为默认页面。现在显示为默认值的所有页面

停止并重新启动IIS,现在您应该可以获得详细的错误


如果IIS为页面提供服务(因此工作进程显然不是空闲的),那么立即通过该页面上的AJAX调用触发脚本,我看不出这是如何发生的。用户在触发AJAX调用之前长时间坐在一个页面上是不是很常见?@Keith-用户似乎喜欢打开这个页面,然后出去开会/休息/上厕所什么的。当他们回来的时候,他们得到了这个错误。如果这些都是我的选择,我宁愿去禁用超时。这会有负面影响吗?我仍然认为必须有其他解决方案,IIS中的某些设置,或者我可以用JavaScript中的AJAX调用做些什么。@Dimskiy-如果服务器负载很重,那么让工作进程无限期运行显然会浪费资源,但除此之外,我认为没有问题。应用程序池仍然应该在每次达到某个阈值(您也可以控制)时进行回收,但是如果站点像您提到的那样空闲,我怀疑您是否会达到该阈值。对于QA环境来说,这是正确的。至于德夫,我是目前唯一一个在那里捣乱的人。但是,我不知道PROD的负载是什么:(@Dimskiy-我建议您查看生产服务器上的应用程序日志,看看是否可以了解应用程序池被回收/工作进程被关闭的频率。如果这不是生产服务器上的问题,我不会担心。如果是,我会关闭空闲超时,看看这是否会改善站点。您可以始终打开IIS详细调试/日志记录,但我必须在IIS6中查找如何执行该操作。@jishi-谢谢!让我来处理这个问题。我知道,只要工作程序在运行,你的应用程序似乎就能工作,所以我猜处理程序映射是正确的,但由于某种原因不会唤醒工作程序。@jishi-你让我记住了另外一件事。Pl请看我更新的帖子。我从来没有使用过.asmx服务,我更熟悉IIS7,对不起。但是也发布web.config的相关部分可能是个好主意,希望有人发现一个明显的错误。但是HttpPost可能应该是其中的一部分?@jishi-如果我在工作进程结束后手动点击这个URLmed out,不管Web.config中有什么,我都会得到“对象引用未设置为对象的实例”。这对我来说毫无意义。