通过 AJAX returns 内部服务器错误调用 ASMX

ASMX call via AJAX returns internal server error

我有一个 (VB) 网站应用程序,它通过 AJAX 控件(使用 AjaxControlToolkit)调用 ASMX 服务来预填充名称搜索。但是,该调用总是 returns 内部服务器错误 500.19 错误 "There is a problem with the resource you are looking for, and it cannot be displayed." 应用程序的所有其他功能都有效。该网站已预编译并部署在双节点 Windows 2012 R2/IIS 8.5 集群上。我已经尝试在每个其他线程中向我的 web.config 添加各种项目,我删除了应用程序并重新创建了它,我已经验证了数据库连接,我已经检查了 IIS 配置中是否存在 ASMX 处理程序。更令人困惑的是,这个应用程序可以在我的本地 Windows 8.1/IIS 8.5 环境和 IIS 7 测试服务器上运行。

该应用程序在为 .NET 4.0 配置的应用程序池下运行,并使用管道模式 "Integrated." 为了进行测试,我尝试使用 2.0 池,但应用程序没有完全没有工作。

请求的格式 URL 我得到的错误是:http://www.example.com/myapplication/EmployeeSearch.asmx/SearchByName

还有什么要看的想法吗?会不会是集群环境的问题导致了这个问题?

(我知道有 87,000 人问过类似的问题,但我还没有找到能解决我的问题的人。)

更新 离开一会儿后,我又回到了这里。我终于能够获得更深入的错误信息 (500.19),尽管它仍然不够阐明。调用 ASMX 是应用程序中唯一产生此错误的部分。我还做了一个快速版本,只使用 jQuery 来调用服务,它产生了相同的结果。根据下文,配置文件路径让我感到困惑......为什么它使用的是路径?

Module: 
    IIS Web Core 
Notification: 
    BeginRequest 
Handler: 
    Not yet determined 
Error Code: 
    0x8007010b 
Config Error: 
    Cannot read configuration file  
Config File: 
    \?\UNC[=12=].0.0.0\webcontent\www.example.com-iis\my-application\EmployeeSearch.asmx\SearchByName\web.config 
Requested URL: 
   http://www.example.com:80/my-application/EmployeeSearch.asmx/SearchByName 
Physical Path
   \0.0.0.0\webcontent\www.example.com-iis\my-application\EmployeeSearch.asmx\SearchByName 
Logon Method
   Not yet determined 
Logon User
   Not yet determined 
Request Tracing Directory
   C:\inetpub\logs\FailedReqLogFiles 

在这种情况下,解决方案(在与 Microsoft 支持人员交谈后)是将应用程序的 allowSubDirConfig 设置为 False

现在备份并解释原因。这是因为 IIS 如何探测 - 如果设置为 True 或根本未设置 - web.config。在尝试检索 web.config 之前检查给定的 path/URL(在本例中为 ASMX 调用)是否是一个目录是足够聪明的,但根据应用程序的存储,它可能不是能够判断它是否是目录,在这种情况下,它默认查找 web.config 就好像该路径是目录一样。就我而言,我们使用远程 NTFS 共享进行存储。 appliance/device 或设备驱动程序可能不支持 IIS 用来检查目录是否存在的 operation/directory 观察程序。将 allowSubDirConfig 设置为 False 意味着在进行 ASMX 方法调用时 IIS 将不会尝试探测 web.config 文件,这可以防止出现 "Cannot read configuration file" 错误。