ASMX call via AJAX returns internal server error

0

I have a (VB) web site application that calls an ASMX service via an AJAX control (using AjaxControlToolkit) to pre-fill a name search. However, that call always returns an internal server error 500.19 with the error "There is a problem with the resource you are looking for, and it cannot be displayed." All other functionality of the application works. The web site is precompiled and deployed on a two-node Windows 2012 R2/IIS 8.5 cluster. I've tried adding various items to my web.config per other threads, I've deleted the application and recreated it, I've verified database connectivity, I've checked that ASMX handlers exist in the IIS config. Even more befuddling is that this application works in my local Windows 8.1/IIS 8.5 environment and on an IIS 7 test server.

The application runs under an application pool configured for .NET 4.0 and using a pipeline mode of "Integrated." For the sake of testing, I've tried using a 2.0 pool, but then the application doesn't work at all.

The format of the request URL I get an error for is: http://www.example.com/myapplication/EmployeeSearch.asmx/SearchByName

Any ideas what else to look at? Would there be something about the cluster environment causing this issue?

(I know 87,000 people have asked a similar question, but I have yet to find one that solves my issue.)

Update After stepping away for a bit, I came back to this. I was finally able to get more in-depth error information (500.19), though it's still not elucidating enough. Calling the ASMX is the only part of the app that produces this error. I also did a quick version that just uses jQuery to call the service, and it produced the same result. Per below, the config file path is befuddling to me...why would that be the path it uses?

Module: 
    IIS Web Core 
Notification: 
    BeginRequest 
Handler: 
    Not yet determined 
Error Code: 
    0x8007010b 
Config Error: 
    Cannot read configuration file  
Config File: 
    \\?\UNC\0.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 
asmx
iis-8.5
asked on Stack Overflow Aug 13, 2015 by Nicole S. • edited Sep 19, 2015 by Nicole S.

1 Answer

1

The solution, in this case, (after speaking to Microsoft Support) was to set allowSubDirConfig for the application to False.

Now to back up and explain why. This is because of how IIS probes - if set to True or not set at all - for the web.config. It is smart enough to check if a given path/URL (in this case, an ASMX call) is a directory before attempting to retrieve a web.config, but depending on the storage for the application, it may not be able to tell if it is a directory, in which case it defaults to looking for a web.config as if that path is a directory. In my case, we are using a remote NTFS share for storage. Likely the appliance/device or the device driver doesn't support the operation/directory watcher IIS uses to check for the existence of the directory. Setting allowSubDirConfig to False means IIS won't attempt to probe for a web.config file when an ASMX method call is made, which prevents the "Cannot read configuration file" error I was getting.

answered on Stack Overflow Feb 4, 2016 by Nicole S.

User contributions licensed under CC BY-SA 3.0