Etiquetas

, ,

ajax_p

En esta oportunidad quiero mostrar cual seria la correcta configuración del web.config en una aplicación asp.net que use ajax, esto en el caso de que se haya agregado manualmente el archivo web.config manualmente o no se haya utilizado AJAX-enabled Web Site al momento de crear nuestra aplicación.


El elemento  <configSections>  debe lucir como sigue:

<configuration>
<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>
</configuration>

El elemento <controls>:registra el namespaces ASP.NET AJAX namespaces en el ensamblado System.Web.Extensions y mapea el prefijo de la etiqueta asp como alias para este namespaces.

<system.web>
<pages>
<controls>
<add tagPrefix=”asp” namespace=”System.Web.UI” assembly=”System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>
</controls>
</pages>
</system.web>

El elemento <assemblies>:registra el ensamblado e System.Web.Extensions

<system.web>
<compilation>
<assemblies>
<add assembly=”System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>
</assemblies>
</compilation>
</system.web>

El elemento <httpHandlers>: agrega nuevos handlers para el  requests  de los scripts

<system.web>
<httpHandlers>
<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”/>
</httpHandlers>
</system.web>

El elemento <httpModules> : define los modulos HTTP usados en  ASP.NET AJAX

<system.web>
<httpModules>
<add name=”ScriptModule” type=”System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35″/>
</httpModules>
</system.web>

El elemento <system.web.extensions>: provee elementos que pueden ser descimentados para configurar como los web services son llamados desde aplicaciones ASP.NET AJAX .

<system.web.extensions>
<scripting>
<webServices>
<!– Uncomment this line to customize maxJsonLength and add a
custom converter –>
<!–
<jsonSerialization maxJsonLength=”500″>
<converters>
<add name=”ConvertMe”
type=”Acme.SubAcme.ConvertMeTypeConverter”/>
</converters>
</jsonSerialization>
–>
<!– Uncomment this line to enable the authentication service.
Include requireSSL=”true” if appropriate. –>
<!–
<authenticationService enabled=”true” requireSSL = “true|false”/>
–>

<!– Uncomment these lines to enable the profile service. To
allow profile properties to be retrieved
and modified in ASP.NET AJAX applications, you need to add
each property name to the readAccessProperties and
writeAccessProperties attributes. –>
<!–
<profileService enabled=”true”
readAccessProperties=”propertyname1,propertyname2″
writeAccessProperties=”propertyname1,propertyname2″ />
–>
</webServices>
<!–
<scriptResourceHandler enableCompression=”true”
enableCaching=”true” />
–>
</scripting>
</system.web.extensions>

El elemento <system.webserver>: contiene los parámetros de configuración usado por  Microsoft Internet Information Server (IIS) 7.0.

<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>

Bueno esto es todo lo que debe tener nuestro web.config, pero tan importante  como que debe tener también lo es que No debe tener nuestro web.config y en este caso me refiero al elemento <xhtmlConformance/> , cuando este elemento contiene mode=”Legacy” puede producir comportamientos extraños tanto para nuestro ajax como para nuestro código javascript.

El elemento <xhtmlConformance mode=”Legacy”/> es agregado automáticamente cuando migramos un proyecto de VS 2003 a VS 2005.

Les dejo los enlaces con los artículos completos acerca de la configuración del web.config en aplicaciones Asp.Net Ajax.

http://www.asp.net/ajax/documentation/live/ConfiguringASPNETAJAX.aspx

http://weblogs.asp.net/scottgu/archive/2006/12/10/gotcha-don-t-use-xhtmlconformance-mode-legacy-with-asp-net-ajax.aspx