Colaboraciones en el Guille

Crear y configurar un directorio virtual IIS para SQLXML mediante código C# .NET

[uso del componente COM Microsoft SQL Virtual Directory Control 3.0]

 

Fecha: 21/Dic/2005 (21-12-05)
Autor: Percy Reyes Paredes - [email protected]

percy's blog - percy's artículos


otra vez yo, ...yo programador maniático?

Hola! ...aquí estoy otra vez yo, yo para intentar ayudarte, yo..., yo para animarte, yo para hacerte reir con algunas bromas (si es que pueden llamárselas así) que meto en mis artículos, yo que trato de decirte: "nada es imposible !, pensáis con creatividad...!", yo un adicto de esto, esto que se llama "compartir conocimientos", y nada mejor que las tecnologías Microsoft .net. Ah ! por cierto, ¿ cómo estás ?, ¿alegre?, ¿feliz?, ¿contento?, o ¿decepcionado? ¿triste? ¿o qué deseas hacer?... ¿quieres llorar?, ¿quieres gritar?, ¿quieres patearle el trasero al vecino de al lado? o tal vez ¿al Sr. jefe?, o deseas meterle fuego a tu suegra ? (no estaría nada mal, je, je, je... mentira), al fin y al acabo no sé que querrás hacer, oyeee !  y qué piensas ???,  ¿en un proyecto que tienes que entregar?, en un próximo trabajo?,  o quizás ¿en la nena que te guiñó hoy día?,... bueno, la vida es corta, aprovéchala, disfrútala, pues es única, única como el amor de Dios, ese amor que te iluminará por siempre, y ese  siempre que me dará fuerzas para seguir escribiendo artículos hasta que Dios me recoja.

Ahora me pregunto, Dios me recogerá ?, o "lucifercito"?, creo que lucifercito, je, je, je....bueno, sencillamente no desesperes cuando sientas que el mundo cae sobre tu cabeza, recuerda que debes estar super bien pase lo que pase. Dime tú, ¿crees que papá Noel exista ?, crees que sí ? o crees que no ?, que tal si te imaginas a un papá Noel programador,  ja, ja, ja.. esto es un chiste eh!, o quien sabe, una tontería, pero lo que sé es que me he dado cuenta que algo me ha rayado el cerebelo... ¿y tú que crees?, o que "rajas" ahora de mí?, de seguro que estarás preguntándote, y este tipo no tiene nada que hacer?, como para estar colgando esto en la red?, ahora yo te respondo, ¿por qué se tiene que empezar a escribir un artículo de una manera técnica siempre?... dejemos eso para los tíos, somos jóvenes, penséis como joven y moverás el mundo...  con esto trato de ser tu amigo, y no, un desconocido. okey. Te deseo lo mejor y nunca dejes esa obsesión por la programación, recuerda, tan sólo existen, tu ordenador, el tao de la programación y tú. Dicen que el perro es el mejor amigo del hombre, pues yo creo que para los programadores eso no es cierto, pues tu mejor amigo es tu propio código que te acompaña día y noche, y del cual te debes sentir muy orgulloso, por más sencillo que sea,  al fin y al acabo es tuyo, con el tiempo, esto será tu razón de ser, y quien sabe, tu fortuna.

¿ recuerdas ?

Dime algo más, te acuerdas que en este artículo aprendimos a configurar un directorio virtual IIS para SQLXML ?, pues bien, te cuento que también puedes hacerlo dinámicamente mediante código, así como escuchas, existe un componente COM que nos ofrece todo un set de funcionalidades que podemos aprovechar para llevar acabo estas tareas de configuración de un directorio virtual IIS. Este componente es el Microsoft SQL Virtual Directory Control 3.0 y, sólo tienes que embeberlo en tu proyecto, y podrás trabajar con él. Si no tienes idea de la utilidad de este artículo, te aconsejo leer estos artículos, cuyos enlaces, especifico más abajo, pues en esas cosas que escribí, llamados artículos, explico conceptos acerca de la funcionalidad SQLXML que te ayudaran a comprender el porqué de este artículo.

Referencias que debes consultar antes de seguir

  1. Configuración de Directorios Virtuales IIS para SQLXML 3.0
  2. Funcionalidad XML en SQL SERVER
  3. Acceso a SQL Server mediante una URL usando Stored Procedures

Esta vez no detallaré la parte teórica, ya que esto lo tienes en los artículos anteriores que hago referencia, así que continuemos con un sencillo ejemplo. Para esto, debes crear una aplicación en C# .NET, luego importa este componente. Guíate de la imagen que sigue a continuación.

Agregar referencia

Aparece una especie de ventana de ayuda "Add Reference", luego en la ficha COM, busca este componente, dale doble click y luego dale OK.

Lista de componentes COM

y tendremos la referencia SQLVDIRLib para este componente. Aprecie la imagen, se dará cuenta que la referencia ha sido agregada.

Referencia del componente COM Microsoft SQL Virtual Directory Control

Se supone que cuando se crea un directorio virtual IIS, esta debe apuntar a una cierta base de datos (en este caso Northwind), y a la vez debe estar vinculada a un directorio físico, la cual a su vez, tendrá subcarpetas para los objetos que usaremos en la realización de ciertas tareas de consultas a la base de datos. Es así que usted debe crear estas carpetas. Puede ver en la imagen que sigue a continuación,  las carpetas ya creadas, de no ser así usted no podrá trabajar.

Carpetas que deben crearse

Este código se ocupa de crear las carpetas de las que le hablé anteriormente, pero antes importa lo siguiente:

using System.IO;

como te decía, aquí está el código.

protected void CrearCarpetas()
{ 
    if (Directory.Exists(@"G:\nwind"))
    {
        //...desde esta parte....
        DirectoryInfo[] Subdirectorios =Directory.CreateDirectory(@"G:\nwind").GetDirectories();

        foreach(DirectoryInfo subdir in Subdirectorios)
        {
            if (subdir.GetFiles().GetLength(0)!=0)
            {
                FileInfo[] _files = subdir.GetFiles();

                foreach(System.IO.FileInfo _file in _files)
                {
                    _file.Delete();
                }                        
            }
            subdir.Delete();

        }

        Directory.Delete(@"G:\nwind");
        //...hasta aquí, puedes reemplazarlo por esto: Directory.Delete(@"G:\nwind",true);
        //igualmente será funcional, pero no te acostumbres demasiado a reutilizar funcionalidades...

    }

    //creando directorios y subdirectorios...
    Directory.CreateDirectory(@"G:\nwind");
    DirectoryInfo di =new DirectoryInfo(@"G:\nwind");
    di.CreateSubdirectory("plantillasXML");
    di.CreateSubdirectory("esquemasXML");
    di.CreateSubdirectory("ObjSOAP");
    di.CreateSubdirectory("objeto");
}

Lo que sigue es simplemente el código que realizará la tarea de crear y configurar un directorio virtual IIS para SQLXML. Dentro del código fuente se explica paso a paso cada uno de los métodos usados, y una que otra funcionalidad adicional que se aprovecharon. No te olvides, toda la asignación de valores, atributos, nombre del servidor de base de datos, el nombre de la base de datos, el seteo del path de las carpetas a las cuales se hace referencia,... etc., se hace a puro código. Puedes usar este código y otras funcionalidades del componente para programar y automatizar ciertas tareas conforme al escenario donde te toque trabajar.

La interfaz se la aplicación desarrollada es la siguiente (en ejecución, luego de terminada la tarea).

Directorio Virtual creado con éxito!

bueno, ahora sí, este es el código y espero haber sido claro en la explicación.

Cualquier comentario acerca de este artículo, por favor háganla llegar al correo de arriba. Estúdiate bien este código. Suerte !

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
//este es el componente COM que usaremos
using SQLVDIRLib;

namespace CreacionVDir
{

    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Button btnCrearVDir;
        private System.Windows.Forms.Label lblMsg;

        private System.ComponentModel.Container components = null;

        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null) 
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        //AQUI VA EL CODIGO GENERADO POR EL DISEÑADOR DE WINDOWS
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main() 
        {
            Application.Run(new Form1());
        }

        private void Form1_Load(object sender, System.EventArgs e)
        { 

        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            //...SQLVDirControl3Class es una clase proxy mediante la cual podremos hablar con 
            //   el administrador de directorios virtuales para SQLXML 3.0
            SQLVDIRLib.SQLVDirControl3Class _ObjAdmSQLXML3Control = new SQLVDIRLib.SQLVDirControl3Class();

            _ObjAdmSQLXML3Control.Connect(_ObjAdmSQLXML3Control.IISServerName,"1");

            //verificamos si el directorio virtual que deseamos crear, existe o no
            if ( _ObjAdmSQLXML3Control.SQLVDirs.get_Exists("DirVirtual"))
            {
                //en caso de existir, lo eliminaremos
                _ObjAdmSQLXML3Control.SQLVDirs.RemoveVirtualDirectory("DirVirtual",true); 
            }

            //...creamos una referencia al directorio virtual, luego de crearlo.
           ISQLVDir myVirtualDirectory = _ObjAdmSQLXML3Control.SQLVDirs.AddVirtualDirectory("DirVirtual");

            //...configuramos la ruta física para el directorio virtual, 
            //...aqui se encontrarán las carpetas que almacenarán las plantillas, 
            //   esquemas y objetos que serán usandos para consultar la base de datos.
            myVirtualDirectory.PhysicalPath = @"G:\nwind";

            //seleccionado el modo de autenticación integrada cuando para acceder a la data
            myVirtualDirectory.SecurityMode= SQLVDIRLib.tagSecurityModes.smINTEGRATED;

            //...nombre del servidor,...
            myVirtualDirectory.ServerName=@"DARKMACHINE\DARKMACHINE";

            //...le asignamos el nombre de la base de datos a donde apuntará este directorio virtual
            myVirtualDirectory.DatabaseName= "Northwind";


            //ESPECIFICAMOS LOS TIPOS DE ACCESO PARA SQL SERVER
            //==================================================

            //...usando consultas mediante una URL
            myVirtualDirectory.AllowFlags = SQLVDIRLib.tagAllowFlags.afURL_QUERIES;

            //...definimos que el formato de datos se realice de lado del cliente. 
            //Esto sirve tambíen para usar Nested y Group by.
            myVirtualDirectory.AllowFlags= SQLVDIRLib.tagAllowFlags.afRUNONCLIENT;

            //...permitir consultas XPath
            myVirtualDirectory.AllowFlags = SQLVDIRLib.tagAllowFlags.afXPATH;

            //...consultar mediante plantillas
            myVirtualDirectory.AllowFlags= SQLVDIRLib.tagAllowFlags.afTEMPLATES;

            //...NO usar la cache para guardar esquemas XML compilados
            myVirtualDirectory.AllowFlags= SQLVDIRLib.tagAllowFlags.afDONTCACHESCHEMAS;

            //...permitir updategrams
            //myVirtualDirectory.AllowFlags= SQLVDIRLib.tagAllowFlags.afUPDATEGRAMS;

            //...reportar los errores en tiempo de ejecución que puedan presentar 
            //   cuando realicemos consultas conbtra la base d datos Northwind
            myVirtualDirectory.AllowFlags= SQLVDIRLib.tagAllowFlags.afRUNTIMEERRORS;


            //...ahora vamos a configurar los siguiente para poder trabajar con SOAP
            myVirtualDirectory.AllowFlags= SQLVDIRLib.tagAllowFlags.afPOST;
            myVirtualDirectory.PostSize=200;


            //CREACION DE NOMBRES VIRTUALES
            //=============================

            //creamos un nombre virtual de tipo Object. Esto es útili para consultar, por ejemplo, 
            //imágenes contra una base de datos. Podemos consultar el campo Picture de la tabla 
            //Categories de la base de datos northwind y mostrarlo como resultado de una consulta 
            //mediante una URL.
            //definimos el nombre del  virtual name a "objeto", además del respectivo type vtDBOBJECT 
            myVirtualDirectory.VirtualNames.AddVirtualName("objeto",
            SQLVDIRLib.tagVirtualTypes.vtDBOBJECT,null,System.Type.Missing,System.Type.Missing);

            //creamos un virtual name, nombrado "ObjSOAP", para los requerimientos SOAP.
            myVirtualDirectory.VirtualNames.AddVirtualName("ObjSOAP", SQLVDIRLib.tagVirtualTypes.vtSOAP,
            @"G:\nwind\ObjSOAP", "ObjSOAP", "DARKMACHINE");

            //creamos un virtual name, nombrado "esquema", para los esquemas XML.
           myVirtualDirectory.VirtualNames.AddVirtualName("esquema", SQLVDIRLib.tagVirtualTypes.vtSCHEMA,
            @"G:\nwind\esquemasXML",System.Type.Missing,System.Type.Missing);

            //creamos un virtual name, nombrado "plantilla", para las plantillas XML.
            myVirtualDirectory.VirtualNames.AddVirtualName("plantilla",    tagVirtualTypes.vtTEMPLATE,
            @"G:\nwind\plantillasXML",System.Type.Missing,System.Type.Missing);

            //...desconectamos
            _ObjAdmSQLXML3Control.Disconnect();

            //...
            this.lblMsg.Text="Directorio Virtual creado con éxito !";

        }    
    }
}

Ah ! se me olvidaba algo importarte. Luego debes verificar la configuración mediante el admistrador de directorios virtuales IIS para SQLXML. Por ejemplo, puede ver que los nombres virtuales que creamos, tanto para las plantillas XML, esquemas, SOAP y Object, mediante código se ven reflejado, es decir, sí fueron creadas y configuradas como se programó.

Ficha Virtual Name

 

Ahora sí, he terminado de explicar esta primera parte. Nos vemos en la siguiente entrega para este tema.

MCP Percy Reyes

Microsoft Certified Professional
Estudiante Ing. de Sistemas
Universidad Nacional de Trujillo

Saludos desde Trujillo - Perú

Por favor, califica este artículo en Panoramabox, así me animarás a continuar colaborando contigo.


ir al índice principal del Guille