Trabajar con recursos de Web en ASP.NET 2.0

Seleccione idioma Seleccione idioma
Id. de artículo: 910442 - Ver los productos a los que se aplica este artículo
Columna de voz de soporte de ASP.NET

Trabajar con recursos de Web en ASP.NET 2.0

Para personalizar esta columna a sus necesidades, queremos invitar a que la envíe sus ideas sobre temas de interés para usted y los problemas que desea ver abordaron en próximas columnas de voz de soporte técnico y artículos de Knowledge Base. Puede enviar sus ideas y comentarios utilizando el Solicite . También hay un vínculo al formulario en la parte inferior de esta columna.
Expandir todo | Contraer todo

En esta página

Introducción

Hola! Mi nombre es Praveen Yerneni y soy responsable técnico trabaja con el grupo de soporte ASP.NET de Microsoft. En la columna de este mes, voy a analizar los recursos de la Web y cómo implementarlas en su aplicación.

Si eres un desarrollador que trabaja con controles COM, encontrará este artículo útil resolver algunos de los problemas claves que pueden producirse durante el desarrollo de controles. Anteriormente, en Microsoft ASP.NET 1.1, si desea implementar los archivos estáticos como archivos .html, archivos .css, archivos de imagen y archivos de secuencia de comandos con un control COM, se debían crear a un instalador y empaquetar estos archivos junto con el control COM. Aunque esto funcionaba, presenta muchos problemas durante la implementación del control. Por ejemplo, puede tener problemas con conflictos de versiones, con asegurándose de que se implementaron los archivos como imágenes en la misma ubicación o con archivos dañados o eliminados estáticos que podrían provocar un fallo en el control.

Recursos de Web en Microsoft ASP.NET 2.0 aborda estos problemas al permitir que los desarrolladores incrustar estos recursos en el ensamblado como .resources. Para tener acceso a estos recursos estáticos, sólo puede llamar a un método en el código del control.

Cómo funcionan los recursos Web

Los recursos Web se basan en un controlador especial denominado WebResource.axd, que está diseñado para recuperar recursos de ensamblados y sirven para el explorador Web. El tipo de controlador de WebResource.axd es AssemblyResourceLoader.

Cuando llega una solicitud desde el cliente de WebResource.axd, el controlador busca el identificador de recursos de Web en el método de cadena de consulta del objeto Request . Basándose en el valor del identificador del recurso Web, el controlador intenta cargar el ensamblado que contiene este recurso. Si esta operación se realiza correctamente, el controlador, a continuación, buscará el atributo assembly y cargar la secuencia de recursos desde el ensamblado. Por último, el controlador tomará los datos desde la secuencia del recurso y los enviará al cliente como el tipo de contenido que especifique en el atributo del ensamblado.

La dirección URL de WebResource.axd tiene el siguiente aspecto:
WebResource.axd?d=SbXSD3uTnhYsK4gMD8fL84_mHPC5jJ7lfdnr1_WtsftZiUOZ6IXYG8QCXW86UizF0&t=632768953157700078
El formato de esta dirección URL es WebResource.axd?d=identificador cifrado& t =valor de marca de hora. La "d" significa que el recurso Web solicitado. La "t" es la marca de tiempo para el ensamblado solicitado, que puede ayudar a determinar si ha habido cambios en el recurso.

Profundizar en el código

En mi ejemplo, he desarrollado un control COM que se consume en una aplicación Web ASP.NET para demostrar esta nueva característica.

Control de COM para el recurso Web

Para crear e incrustar un recurso Web, he desarrollado un control COM (SimpleControl). Tiene los siguientes recursos incrustados:
  • Dos archivos de imagen que se denominan smallFail.gif andsmallSuccess.gif. Estos archivos de imágenes se utilizan para efectos de rollover en decontrol y consumidos dentro del código de control.
  • Un archivo HTML denominado Help.htm. Este archivo es notcontain cantidad de texto y es sólo para la demostración.
  • Un archivo JavaScript denominado MyScript.js. Este filecontains algún código JavaScript que también muestra la sustitución featureto obtener una referencia a otro recurso incrustado dentro de la sameassembly.
  • Un archivo .css que se denomina MyStyleSheet.css. Esta hoja de estilos, a continuación, se consume directamente desde la aplicación Web de ASP.NET.
En este artículo, trataré las partes que son necesarios para los recursos Web.
Incrustar los recursos Web
En primer lugar, debe asegurarse de que todos los archivos estáticos que se agregan al proyecto de biblioteca de controles Web en Microsoft Visual Studio 2005 son recursos incrustados. Para incrustar estos recursos, todo lo que tiene que hacer es agregar estos archivos a Visual Studio y, a continuación, modificar las propiedades de estos archivos, por lo que se establece la acción de generación en Recurso incrustado.

Cuando haya hecho esto, tiene que asegurarse de que estos recursos se hace referencia mediante el atributo de ensamblado de recursos Web en el archivo AssemblyInfo.cs, tal como se muestra a continuación.
[assembly: WebResource("SimpleControl.Help.htm", "text/html")]
[assembly: WebResource("SimpleControl.MyStyleSheet.css", "text/css")]
[assembly: WebResource("SimpleControl.smallFail.gif", "image/gif")]
[assembly: WebResource("SimpleControl.smallSuccess.gif", "image/gif")]
[assembly: WebResource("SimpleControl.MyScript.js", "text/javascript", PerformSubstitution = true)]

El atributo de ensamblado de recursos Web tiene tres parámetros de la siguiente manera:
  • Recurso Web: el nombre del recurso que está incrustado en el ensamblado.
  • ContentType: tipo de MIME del archivo para el recurso
  • PerformSubstitution: un valor booleano que determina si se hace referencia a otros URLsthat de recursos de Web en este recurso se analizan y se reemplazan por el camino completo del recurso
La obtención de los recursos Web
Para obtener el recurso Web, he utilizado el método GetWebResourceUrl , que es un método de la clase ClientScriptManager que normalmente se utiliza para administrar las secuencias de comandos de cliente. Este método devuelve una referencia de dirección URL al recurso del servidor incrustado en un ensamblado. El método GetWebResourceUrl acepta los dos parámetros siguientes:
  • Tipo: el tipo de recurso del servidor
  • Nombre del recurso: el nombre del recurso del servidor
Para utilizar este método, primero debe crear una instancia de la clase ClientScriptManager y obtener el tipo de la clase, como se muestra a continuación.
ClientScriptManager cs = Page.ClientScript;
            Type rsType = this.GetType();

Cuando tenga una instancia de esta clase, entonces debe llamar a este método y pasar los parámetros adecuados, como se muestra a continuación, en crear un botón de hipervínculo y el método NavigateURL para que señale un recurso HTML incrustado.
HyperLink hlHelpFile = new HyperLink();
            hlHelpFile.NavigateUrl = cs.GetWebResourceUrl(rsType, "SimpleControl.Help.htm");
            hlHelpFile.Attributes.Add("onmouseover", "ChangeImage('image1','Red')");
            hlHelpFile.Attributes.Add("onmouseout", "RollbackImage('image1','Green')");
            
            this.Controls.Add(hlHelpFile);

            Image imgTest = new Image();
            imgTest.ImageUrl = cs.GetWebResourceUrl(rsType, "SimpleControl.smallFail.gif");
            imgTest.ID = "image1";
            hlHelpFile.Controls.Add(imgTest);

También en el mismo código de arriba, he creado una imagen del botón y el atributo ImageUrl obtiene su valor de otro recurso de imagen .gif incrustado.
Mediante la función de sustitución
Otra característica útil de uso de recursos Web es la propiedad PerformSubstitution del atributo WebResource tal como se muestra en la sección "Incrustar los recursos Web" anterior. Esta característica permite obtener realmente los recursos Web dentro de otro recurso incrustado. Si esta propiedad está habilitada, el controlador de recursos Web analizará el recurso incrustado y sustituir la sintaxis para el atributo de ensamblado de recursos Web por recursos reales antes de servir la página.

En el código anterior, observará que el control de hipervínculo tiene un evento de cliente que se denomina ChangeImage. Esta función ChangeImage se encuentra en un archivo de secuencia de comandos. El siguiente es el código de esta secuencia de comandos.
function ChangeImage(imgControl,varcolor){
   document.getElementById(imgControl).src = '<%= WebResource("SimpleControl.smallSuccess.gif")%>';
    document.getElementById('Label1').style.color = varcolor;
}

function RollbackImage(imgControl, varcolor){
   document.getElementById(imgControl).src = '<%= WebResource("SimpleControl.smallFail.gif")%>';
   document.getElementById('Label1').style.color = varcolor;
}
Este archivo de secuencia de comandos que se denomina MyScript.js también es un recurso incrustado en el mismo control COM. Y observe que estoy utilizando el método de recursos Web para hacer referencia a otro recurso incrustado en el archivo de secuencia de comandos.

Además, para asegurarse de que este archivo de JavaScript está registrado en la página, uso el método RegisterClientScriptInclude de la clase ClientScriptManager tal como se muestra a continuación.
cs.RegisterClientScriptInclude("MyScript", cs.GetWebResourceUrl(rsType, "SimpleControl.MyScript.js"));

Consumir el control de ASP.NET

Una vez que se ha creado correctamente el control COM, necesitará utilizar este control en un proyecto ASP.NET del cliente. Para ello, sólo debe agregar el control al cuadro de herramientas de ASP.NET. A continuación, puede agregar el control a cualquier formulario Web en el diseñador.

Cuando se agrega el control al cuadro de herramientas, el control se registra automáticamente y se agrega el siguiente código al mirar la sintaxis HTML.
<cc1:MSButton ID="MSButton1" runat="server" strText="Problems?"></cc1:MSButton>
En mi control COM, también he incrustado un archivo de hoja de estilo que va a utilizar en una aplicación ASP.NET. Para tener acceso a esta hoja de estilos, debe agregar un vínculo HtmlControl en la página HTML y establece la propiedad runat en server tal como se muestra a continuación.
<link rel="Stylesheet"  id="lnkStyle" runat="server"  />
Después de esto, se puede establecer mediante programación el atributo Href de este control para que señale el atributo de ensamblado de recursos Web en el evento Page_Load , como se muestra a continuación.
protected void Page_Load(object sender, EventArgs e)
    {
        //Get the name of the Web Resource.
        String rsname = "SimpleControl.MyStyleSheet.css";
        
        //Get the type of the class.
        Type rstype = typeof(SimpleControl.MSButton);

        // Get a ClientScriptManager reference from the Page class.
        ClientScriptManager cs = Page.ClientScript;
        lnkStyle.Href = cs.GetWebResourceUrl(rstype, rsname);
     }

Al ejecutar el código, verá un control que es similar a la siguiente:
Contraer esta imagenAmpliar esta imagen
 Error pequeño
Y el ratón sobre el control será similar al siguiente:
Contraer esta imagenAmpliar esta imagen
 éxito pequeño
Al hacer clic en este vínculo, llevará a la página de ayuda, que se incrusta en el archivo de ensamblado COM.

Conclusión

Recursos Web es una nueva característica útil en ASP.NET 2.0. Puede utilizar esta característica para su ventaja si utiliza sabiamente. Muchas de las técnicas de almacenamiento en caché se han utilizado para asegurarse de que los recursos Web no afectan el rendimiento de la aplicación.

En ASP.NET 2.0, el de Microsoft.NET Framework utiliza internamente WebResource.axd para recuperar recursos incrustados. Por ejemplo, la de.NET Framework utiliza WebResource.axd para recuperar el archivo de secuencia de comandos WebUIValidation.js que se utiliza para los controles de validación y recuperar el archivo de secuencia de comandos Menu.js para los controles de menú .

Referencias

Para obtener más información, visite los siguientes sitios Web de Microsoft:
Método ClientScriptManager.GetWebResourceUrl
http://msdn2.Microsoft.com/en-us/library (d=robot)/system.web.ui.clientscriptmanager.getwebresourceurl.aspx

Clase WebResourceAttribute
http://msdn2.Microsoft.com/en-us/library (d=robot)/system.web.ui.webresourceattribute.aspx

Vinculados frente a recursos incrustados
http://msdn2.Microsoft.com/en-us/library/ht9h2dk8.aspx
Como siempre, no dude en enviar ideas sobre temas que desee abordarse en próximas columnas o en la Base de conocimientos mediante la Solicite .

Propiedades

Id. de artículo: 910442 - Última revisión: jueves, 6 de febrero de 2014 - Versión: 5.0
La información de este artículo se refiere a:
  • Microsoft ASP.NET 2.0
Palabras clave: 
kbhowto kbasp kbmt KB910442 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 910442
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com