Existen siete secciones que deberemos modificar para poder habilitar AJAX en nuestro sitio Web:
configSections
controls
assemblies
httpHandlers
httpModules
system.web.extensions
system.webserver
Elemento configSections
Nos sirve para registrar nuevas secciones en nuestro archivo web.config, de esta forma nuestros componentes pueden cargar su configuración directamente desde el web.config y así centralizar la información de arranque en este archivo.
El texto a incluirse se verá como el que sigue:
<configSections>
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere"/>
<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
</sectionGroup>
</sectionGroup>
</sectionGroup>
</configSections>
Elemento controls
En este lugar nosotros registramos los controles que ocuparemos en nuestro sitio web, asignándoles un prefijo y un espacio de nombres.
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
Podemos ver que está utilizando el espacio de nombres System.Web.UI (que ya existe) para integrarlo junto con los demás controles de .NET y tenerlos en el mismo espacio de nombres
Elemento assemblies
Esta zona del web.config nos ayuda a registrar los assemblies que utilizaremos en la aplicación y lo utilizaremos para anunciar que System.Web.Extensions será utilizado en la nuestra.
<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
Elemento httpHandlers
Aquí registramos los manejadores de peticiones que tendrá registrado nuestro sitio. Por ejemplo, si tuviéramos un httpHandler que reciba como parámetro la dirección a una imagen y nos devolviera el thumbnail generado lo registraríamos aquí bajo el nombre que nosotros queramos siempre y cuando la extensión esté asignada al aspnet_isapi en el IIS
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
Elemento httpModules
En este sitio registramos los assemblies con los que cambiaremos la forma en que el request se ejecutará.
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
Elemento system.webServer
Este elemento es utilizado únicamente cuando nuestro sitio estará alojado en el IIS7, dependiendo de la forma en la que esté configurado el servidor será la configuración de este elemento. Habrá que verificar el web.config global dentro de la carpeta de configuración del servidor, generalmente ubicada
en C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG. Si aquí ya cuenta con el elemento system.webServer, nos podremos ahorrar este elemento, pero en caso contrario deberemos introducir el siguiente código:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-ISAPI-2.0"/>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</handlers>
</system.webServer>
Desglozando un poco el código podemos ver que en realidad volvemos a configurar los httpModules y los httpHandlers.