Respondida Como crear URLs' amigables con ASP.NET 2008

  • viernes, 04 de diciembre de 2009 19:00
     
     

    Hola
    Estoy en un dilema desde hace ya un par de semanas y en verdad que ustedes son mi ultima opcion para salir de el, En verdad agradeceria su ayuda. La situacion es la siguente:
    Talvez han escuchado o leido de las llamadas Url's semanticas o amigables que en escencia es:

    Pasar de esto: http://www.miweb.com/Default.aspx?seccion=noticias&id_noticia=133
    A esto otro:     http://www.miweb.com/noticias/url-amigables.aspx

    Pues bien, es precisamente eso lo que yo quiero realizar por medio de Microsoft Visual Studio 2008 ( C# o VB);
    que mis Url's sean mas amigables para mis usuarios por supuesto conservando el mismo link aunque la apariencia de la URL cambie. 
    De antemano agradezco todas las posibles soluciones que puedan darme para solucionar este problema.

    Nota: Ya he realizado diversos ejemplos que he encontrado en internet, sin embargo no los menciono porque me gustaria una lluvia de respuestas objetiva, ya que talvez me he "brincado" algunos detalles que aun no logro ver o que ni siquiera he llegado a contemplar por no saber de ellos.

    Gracias


     

Todas las respuestas

  • viernes, 04 de diciembre de 2009 19:20
     
     Respuesta propuesta
    Hola Gabriel,

    De que versión del Framework estamos hablando?

    Con el sp1 de la versión 3.5 se introdujo el motor de rutas que usa asp.net mvc.
    Mirate este artículo a ver si te sirve:

    Y la traducción automática al castellano:


    Un saludo!

    www.secondnug.com
  • sábado, 05 de diciembre de 2009 10:36
     
     
    Buenas,

    si utilizas ASP.NET MVC, las "URL amigables" vienen de serie, aunque supongo que la pregunta se refiere a utilizar este tipo de direcciones en proyectos Webforms, es decir, los habituales en ASP.NET, ¿no?

    En ese caso, como comenta Alfredo, puedes utilizar el motor de Routing de ASP.NET 3.5 SP1. El enlace que aporta es un estupendo punto de partida.

    Pero hay otras soluciones ajenas a esta versión del framework, como las descritas hace ya tiempo en un post de ScottGu, "Tip/Trick: Url Rewriting with ASP.NET". En él, describe cuatro enfoques posibles para conseguirlo: utilizando parámetros en el Path, mediante un módulo Http como UrlRewriter o UrlRewriting, usando reescritura en IIS7, y mediante filtros ISAPI.

    Y si puedes esperar un poco, ASP.NET 4.0 lo va a poner mucho más fácil.

    Un saludo.

    José M. Aguilar Variable not found
  • sábado, 05 de diciembre de 2009 19:49
     
     
    Buenas,

    si utilizas ASP.NET MVC, las "URL amigables" vienen de serie, aunque supongo que la pregunta se refiere a utilizar este tipo de direcciones en proyectos Webforms, es decir, los habituales en ASP.NET, ¿no?

    En ese caso, como comenta Alfredo, puedes utilizar el motor de Routing de ASP.NET 3.5 SP1. El enlace que aporta es un estupendo punto de partida.

    Pero hay otras soluciones ajenas a esta versión del framework, como las descritas hace ya tiempo en un post de ScottGu, "Tip/Trick: Url Rewriting with ASP.NET". En él, describe cuatro enfoques posibles para conseguirlo: utilizando parámetros en el Path, mediante un módulo Http como UrlRewriter o UrlRewriting, usando reescritura en IIS7, y mediante filtros ISAPI.

    Y si puedes esperar un poco, ASP.NET 4.0 lo va a poner mucho más fácil.

    Un saludo.

    José M. Aguilar Variable not found

    Hola Jose

    Antes que nada Gracias por tu respuesta.
    En verdad me sirvio de mucho para dar otro enfoque a este dilema, sin embargo olvide mencionar algo en mi pregunta...
    Ya llevo haciendo 3 ejemplos diferentes ( incluyendo el primero del Post de ScootGu ) en base a informacion de la WEB, y ellos funcionan dentro de los parametros que requiero, sin embargo en los 3 diferentes "programas" me manda el mismo error al emplear un control AJAX ( Timer ).

    Estos errores me aparecen en unas pequeñas ventanas, con tres botones ( Interrumpir, Continuar, Omitir ).

    Este es el que me aparece primero, sin dejar ejecutar el programa.
    "Error en tiempo de ejecución de Microsoft JScript: Error al cargar el marco de trabajo de cliente ASP.NET Ajax."

    Al pulsar el boton omitir, me aparece este otro.
    "Error en tiempo de ejecución de Microsoft JScript: 'Sys' no está definido"

    En verdad que en esta parte, ya estoy totalmente desorientado al no saber porque en programas que manejan funciones y archivos diferentes para su funcionalidad, en todos me manda el mismo ERROR.
    Al implementar este ultimo que se encuentra en el POST, y al haberme mandado dicho error, me encuentro en en la situacion de no saber que hacer o porque tal error.

    Cabe mencionar que este error ya lo he buscado en la WEB, implemente y cheque gran cantidad de posibles soluciones (que por cierto a otros parece funcionarles, esto en base a sus comentarios) que no arrojaron una solucion satisfactoria.
    Y esque en verdad es necesario el uso de controles AJAX en mi  proyecto.

    Sabras algo de esto????

    Saludos.


    "Faber est suae quisque fortunae"
  • sábado, 05 de diciembre de 2009 19:55
     
     
    Alfredo Gracias por tu pronta respuesta, me empape de nueva informacion que no tenia contemplada.

    He "solucionado" una parte de mi proyecto sin embargo tengo un detalle al momento de introducir controles AJAX...
    este problema ya me ocurrio con todos aquellos programas que he realizado o implementado.

    Si de referencia sirve, cada unos de los programas ( en total 3 ) me mandan el mismo error al momento de introducir un TIMER de AJAX.

    Estos errores me aparecen en unas pequeñas ventanas, con tres botones ( Interrumpir, Continuar, Omitir ).

    Este es el que me aparece primero, sin dejar ejecutar el programa.
    "Error en tiempo de ejecución de Microsoft JScript: Error al cargar el marco de trabajo de cliente ASP.NET Ajax."

    Al pulsar el boton omitir, me aparece este otro.
    "Error en tiempo de ejecución de Microsoft JScript: 'Sys' no está definido"

    Agradeceria mucho si sabes algo al respecto de este problema.

    Saludos.
    "Faber est suae quisque fortunae"
  • sábado, 05 de diciembre de 2009 22:11
     
     
    Hola Gabriel,

    por lo que comentas, tiene toda la pinta de ser que el mismo procedimiento de reescritura provoca problemas al cargar el marco de trabajo Ajax desde el cliente, es decir, en el acceso a las librerías de script.

    Puedes probar a ver qué está pasando utilizando alguna herramienta que te permita ver las peticiones que realizas desde cliente y ver cuál de ellas no está llegando a su destino (probablemente generando un error 404 o similar). En estos casos, a mí me resulta muy útil Firebug (para Firefox), en cuya pestaña "red" puedo observar las peticiones, las rutas a las que se realizan y la respuesta del servidor.

    Suerte!

    José M. Aguilar Variable not found
  • domingo, 06 de diciembre de 2009 0:39
     
      Tiene código
    Hola Gabriel,

    Prueba a poner esta linea al principio del metodo RegisterRoutes()

    routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));
    Como dicen aquí:

    Un saludo!

    www.secondnug.com
  • domingo, 06 de diciembre de 2009 20:54
     
      Tiene código
    Prueba a poner esta linea al principio del metodo RegisterRoutes()

    routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));
    Como dicen aquí:


    Hola!

    Efectivamente, si optas por utilizar el sistema de routing de .NET 3.5, la solución de Alfredo podría corregir el problema... simplemente, se indica al motor de rutas que ignore las peticiones a recursos *.axd y listo.

    Pruébalo y ya nos cuentas. ;-)

    Saludos.


    José M. Aguilar Variable not found
  • lunes, 07 de diciembre de 2009 16:33
     
     
    Gracias a los dos (Alfredo y Jose) en verdad.

    Ya probe las dos opciones que me dieron, tanto con FIREBUG y con la linea "routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));" en el "RegisterRoutes" del Global.asax

    Con Firebug le soy honesto no le entiendo mucho, sin embargo puedo ver que al momento de agregar mi control AJAX ( el puro ScriptManager y ejecutarlo) me marca en la pestaña RED, "3 PEDIDOS" más ( 2°, 3° y 4°); de los cuales cada uno marca esta direccion:


    http://localhost:49186/PaginaDestino.aspx


    http://localhost:49186/WebResource.axd?d=D5VLj6X7oNCUt3dFwUs4Mw2&t=633802477995006876


    http://localhost:49186/ScriptResource.axd?d=V7HE2COzsJLh1In-qc-1t3FWJtfeGSZcu3Aa0rN7Xh7-x60qbNR8ZtvSYu4SbjX7CwgDU-ByqnNuAAQvNeS3PEm8hbxiGuToIPm1eWrMlZU1&t=ffffffffec2d9970


    http://localhost:49186/ScriptResource.axd?d=V7HE2COzsJLh1In-qc-1t3FWJtfeGSZcu3Aa0rN7Xh7-x60qbNR8ZtvSYu4SbjX7tBSlDyq7_Ms8o31znv_OgZC_Y5xVKruwUVMCnQI2S04pV4iFMiLgYibAE5wByOy30&t=ffffffffec2d9970

    ...los 3 ultimos me aparecen al momento de agregar el control AJAX, pero siendo honesto con ustedes, no entiendo exactamente que significa esto.
    sin embargo si puedo ver que en los 3 me marca un ".axd" ¿Esto quiere decir que si se pierde.? 

    Por otro lado con la linea de codigo "routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));"
    me marca un error al principio de la linea ( "routes" ), me marca una linea roja abajo de dicha palabra, y al pasar el mouse sobre ella, dice:
     "El nombre 'routes' no existe en el contexto actual."  Tengo la Referencia "System.Web.Routing" no se si esto afecte...


    Encerio Gracias por sus anteriores respuestas a los 2, de alguna forma me siento mas cerca de la solucion que al principio.
    SALUDOS


    "Faber est suae quisque fortunae"
  • lunes, 07 de diciembre de 2009 17:19
     
     
    Si quieres, crear un proyecto nuevo y sencillo en el que se reproduzca el error y colgarlo por aquí para que le echemos un vistazo...


    Un saludo!



    www.secondnug.com
  • lunes, 07 de diciembre de 2009 19:06
     
      Tiene código
    Si quieres, crear un proyecto nuevo y sencillo en el que se reproduzca el error y colgarlo por aquí para que le echemos un vistazo...


    Un saludo!



    www.secondnug.com

    Ok si, puedo mandarles el proyecto a sus correos, si asi es mas comodo revisarlo.
    Pero por el momento dejo aqui el codigo.



    Global.asax.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.SessionState;
    using System.Web.Routing;
    
    namespace RewriteUrl
    {
        public class Global : System.Web.HttpApplication
        {
    
            protected void Application_Start(object sender, EventArgs e)
            {
                 
            }
            
            protected void Session_Start(object sender, EventArgs e)
            {
    
            }
    
            private void RegisterRoutes()
            {
               
                //RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
                RouteTable.Routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));
            }
    
            protected void Application_BeginRequest(object sender, EventArgs e)
            {
    
            }
    
            protected void Application_AuthenticateRequest(object sender, EventArgs e)
            {
    
            }
    
            protected void Application_Error(object sender, EventArgs e)
            {
    
            }
    
            protected void Session_End(object sender, EventArgs e)
            {
    
            }
    
            protected void Application_End(object sender, EventArgs e)
            {
    
            }
        }
    }
    



    Global.asax


    <%@ Application Codebehind="Global.asax.cs" Inherits="RewriteUrl.Global" Language="C#" %>
    
    <script runat="server">
    
        void Application_Start(object sender, EventArgs e) 
        {
            // Code that runs on application startup
        }
        
        void Application_End(object sender, EventArgs e) 
        {
            //  Code that runs on application shutdown
        }
            
        void Application_Error(object sender, EventArgs e) 
        { 
            // Code that runs when an unhandled error occurs
        }
    
        void Session_Start(object sender, EventArgs e) 
        {
            // Code that runs when a new session is started
        }
    
        void Session_End(object sender, EventArgs e) 
        {
            // Code that runs when a session ends. 
            // Note: The Session_End event is raised only when the sessionstate mode
            // is set to InProc in the Web.config file. If session mode is set to StateServer 
            // or SQLServer, the event is not raised.
        }
    
        void Application_BeginRequest(object sender, EventArgs e)
        {
    
            //string urlOriginal = Request.Url.ToString().ToLower();
            //if (urlOriginal.Contains("/lista.asp?tipo=articulo&talla=3" ))
            //    Context.RewritePath( "/lista/articulo/3" );
            //END IF;
    
    
            string ruta = Request.Path.ToLower();
            if (!ruta.Contains("/default.aspx")) //ruta es diferente de Default.aspx (hace una comparacion con la ruta de la pagina primaria)
            //    Context.RewritePath("Destino.aspx"); 
            // ("Destino.aspx") --> indica en que pagina se Reescribira la URL.
            
            //ORIGINAL
            Context.RewritePath("Destino.aspx?tipo=" + ruta);
    
           
        }
    </script>
    



    Destino.aspx.cs


    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    
    public partial class Destino : System.Web.UI.Page
    {
        //Solo sirve para el Texto ( NO RELEVANTE )
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["tipo"] != null)
                lblDestino.Text = Request.QueryString["tipo"].ToString();
        }
    }


    Destino.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Destino.aspx.cs" Inherits="Destino" %>

    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit.HTMLEditor"
        TagPrefix="cc1" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="Head1" runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>Ud. está buscando la página de:&nbsp;<asp:Label ID="lblDestino" runat="server"></asp:Label></div><p>
        Estas en: DESTINO.aspx</p>
        </form>
        <p>
            &nbsp;</p>
          
    </body>
    </html>



    Default.aspx

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit.HTMLEditor"
        TagPrefix="cc2" %>
    
    <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
    
    <%@ Register Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        Namespace="System.Web.UI" TagPrefix="asp" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="Head1" runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
         <form id="form1" runat="server">
        <div>
            Seleccione una opción:<br />      
            <br />
            <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Hombres.aspx">hombres</asp:HyperLink>
            <br />
            <asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/Mujeres.aspx">mujeres</asp:HyperLink>
            <br />
            <asp:HyperLink ID="HyperLink3" runat="server" NavigateUrl="~/Ninos.aspx">niños</asp:HyperLink>
            <br />
            <asp:HyperLink ID="HyperLink4" runat="server" NavigateUrl="~/Ninas.aspx">niñas</asp:HyperLink></div><br />
        
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Timer ID="Timer1" runat="server" Interval="100" OnTick="Timer1_Tick">
                </asp:Timer>
                <asp:Label ID="Label1" runat="server"></asp:Label>
                <br />
            </ContentTemplate>
        </asp:UpdatePanel>    
        </form>
        <p>
            &nbsp;</p>
    </body>
    </html>
    

    Default.aspx.cs

    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = DateTime.Now.ToLongTimeString();
        }
        protected void Timer1_Tick(object sender, EventArgs e)
        {
            Label1.Text = DateTime.Now.ToLongTimeString();
          
        }
    }





    "Faber est suae quisque fortunae"
  • lunes, 07 de diciembre de 2009 19:09
     
      Tiene código

    Web.config

    <?xml version="1.0"?><!-- 
        Note: As an alternative to hand editing this file you can use the 
        web admin tool to configure settings for your application. Use
        the Website->Asp.Net Configuration option in Visual Studio.
        A full list of settings and comments can be found in 
        machine.config.comments usually located in 
        \Windows\Microsoft.Net\Framework\v2.x\Config 
    --><configuration>
     <!--*************************** <script src="/WebSiteControl/WebResource.axd" type="text/javascript"></script>-->
      <configSections>
        <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
              <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
              <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
              <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
              <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
            </sectionGroup>
          </sectionGroup>
        </sectionGroup>    
      </configSections>  
      <appSettings/>
      <connectionStrings/>
    
      
      <system.web>
        <!-- 
                Set compilation debug="true" to insert debugging 
                symbols into the compiled page. Because this 
                affects performance, set this value to true only 
                during development.
            -->
        <compilation debug="true">
    			<assemblies>
    				<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    				<add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    				<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Data.Services.Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Data.Services.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
          </assemblies>
        </compilation>
        <!--
                The <authentication> section enables configuration 
                of the security authentication mode used by 
                ASP.NET to identify an incoming user. 
            -->
        <authentication mode="Windows"/>
    
        <pages>
          <controls>
            <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          </controls>
        </pages>
    
      
        <httpHandlers>
          <remove verb="*" path="*.asmx"/>
          <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
        </httpHandlers>
    
        
        <httpModules>
          <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </httpModules>
        
        
        <!--
                The <customErrors> section enables configuration 
                of what to do if/when an unhandled error occurs 
                during the execution of a request. Specifically, 
                it enables developers to configure html error pages 
                to be displayed in place of a error stack trace.
    
            <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
                <error statusCode="403" redirect="NoAccess.htm" />
                <error statusCode="404" redirect="FileNotFound.htm" />
            </customErrors>
            -->
      </system.web>
    
      <system.codedom>
        <compilers>
          <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
                    type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <providerOption name="CompilerVersion" value="v3.5"/>
            <providerOption name="WarnAsError" value="false"/>
          </compiler>
        </compilers>
      </system.codedom>
    
      <!-- 
            La sección system.webServer es necesaria para ejecutar ASPN.NET AJAX en Internet
            Information Services 7.0. No es necesaria para la versión anterior de IIS.
        -->
      <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules>
          <remove name="ScriptModule" />
          <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </modules>
        <handlers>
          <remove name="WebServiceHandlerFactory-Integrated"/>
          <remove name="ScriptHandlerFactory" />
          <remove name="ScriptHandlerFactoryAppServices" />
          <remove name="ScriptResource" />
          <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
               type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
               type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.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=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        </handlers>
      </system.webServer>
    
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
            <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
            <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    
     




    Este es proyecto, en Internet Explorer es donde marca el error, en Firefox, lo ejecuta pero simplemente los controles AJAX no funcionan, en este proyecto use un "Timer" veran que en Firefox el reloj se queda estatico cuando deberia estar actualizandose cada segundo.

    Gracias.

    "Faber est suae quisque fortunae"
  • lunes, 07 de diciembre de 2009 19:18
     
      Tiene código
    Web.config

    <?xml version="1.0"?><!-- 
        Note: As an alternative to hand editing this file you can use the 
        web admin tool to configure settings for your application. Use
        the Website->Asp.Net Configuration option in Visual Studio.
        A full list of settings and comments can be found in 
        machine.config.comments usually located in 
        \Windows\Microsoft.Net\Framework\v2.x\Config 
    --><configuration>
     <!--*************************** <script src="/WebSiteControl/WebResource.axd" type="text/javascript"></script>-->
      <configSections>
        <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
              <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
              <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
              <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
              <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
            </sectionGroup>
          </sectionGroup>
        </sectionGroup>    
      </configSections>  
      <appSettings/>
      <connectionStrings/>
    
      
      <system.web>
        <!-- 
                Set compilation debug="true" to insert debugging 
                symbols into the compiled page. Because this 
                affects performance, set this value to true only 
                during development.
            -->
        <compilation debug="true">
    			<assemblies>
    				<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    				<add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    				<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Data.Services.Client, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Data.Services.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
          </assemblies>
        </compilation>
        <!--
                The <authentication> section enables configuration 
                of the security authentication mode used by 
                ASP.NET to identify an incoming user. 
            -->
        <authentication mode="Windows"/>
    
        <pages>
          <controls>
            <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          </controls>
        </pages>
    
      
        <httpHandlers>
          <remove verb="*" path="*.asmx"/>
          <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
        </httpHandlers>
    
        
        <httpModules>
          <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </httpModules>
        
        
        <!--
                The <customErrors> section enables configuration 
                of what to do if/when an unhandled error occurs 
                during the execution of a request. Specifically, 
                it enables developers to configure html error pages 
                to be displayed in place of a error stack trace.
    
            <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
                <error statusCode="403" redirect="NoAccess.htm" />
                <error statusCode="404" redirect="FileNotFound.htm" />
            </customErrors>
            -->
      </system.web>
    
      <system.codedom>
        <compilers>
          <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4"
                    type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
            <providerOption name="CompilerVersion" value="v3.5"/>
            <providerOption name="WarnAsError" value="false"/>
          </compiler>
        </compilers>
      </system.codedom>
    
      <!-- 
            La sección system.webServer es necesaria para ejecutar ASPN.NET AJAX en Internet
            Information Services 7.0. No es necesaria para la versión anterior de IIS.
        -->
      <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules>
          <remove name="ScriptModule" />
          <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </modules>
        <handlers>
          <remove name="WebServiceHandlerFactory-Integrated"/>
          <remove name="ScriptHandlerFactory" />
          <remove name="ScriptHandlerFactoryAppServices" />
          <remove name="ScriptResource" />
          <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
               type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
               type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.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=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        </handlers>
      </system.webServer>
    
      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
            <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
            <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
    </configuration>
    
       


    Este es el proyecto "RewriteUrl" en Internet Explorer manda el error, pero en Firefox lo deja ejecutar sin marcar nada, pero el control AJAX (Timer), simplemente no funciona. El timer en este caso lo que deberia de hacer es estar ejecutandose (por segundos actualizar), es decir, el reloj debe estar "corriendo" y dar la hora a cada segundo.

    Gracias
    "Faber est suae quisque fortunae"
  • lunes, 07 de diciembre de 2009 20:33
     
     
    Ahora no tengo tiempo, luego lo miro, si quieres mandarlo al correo, el mio es: fredyfl arroba gmail...

    Un saludo!

    www.secondnug.com
  • lunes, 14 de diciembre de 2009 18:59
     
     Respondida Tiene código
    Hola!

    Aunque un poco tarde, comento lo que he podido ver en tu código por si todavía está pendiente de resolver.

    El "routing" lo estás haciendo a mano, en el evento BeginRequest del Global.asax. No estás usando, por tanto, el sistema de rutado de .NET 3.5, y por ese motivo no te funcionan las reglas que estás añadiendo a la colección de rutas para que ignore los .axd.

    La forma correcta en este caso pienso que sería añadir esa lógica al BeginRequest, así:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
       string ruta = Request.Path.ToLower();
       if (!ruta.Contains(".axd"))
       {
          if (!ruta.Contains("/default.aspx"))
          {
             Context.RewritePath("/destino.aspx?tipo=" + ruta);
           }
        }
    }
    Como ves, es el mismo código que tenías antes, pero en la primera línea le indicamos que no cambie las rutas para las direcciones que contengan un .axd. De esta manera, tendrás funcionando tu reloj ajax en la página principal. :-)

    Saludos.


    José M. Aguilar Variable not found