martes, 3 de noviembre de 2009

Creacion de Componentes COM++, Desde el inicio - Parte II.

Veamos, con este ejemplo que sera mas interesante y trataremos de hacerlo lo mas detallado para que sea entendible en su realizaciòn. la idea de este ejemplo es el de crear un componente pero que este este alojado del lado del servidor de componentes como un puente entre el cliente y el servidor de BD, esta forma de realizar proyectos nos ayuda a colocar los procesos que necesitan mas recursos de procesamiento ya que hara el trabajo sera este servidor de componentes y no el cliente.
Veamos la siguiente imagen que representa lo que vamos a realizar:



Como Uds ven tenemos un recurso mas en este modelo que es el servidor de componentes, en la parte I tenemos los proyectos Clientes y COMClientes que son alojados en el lado del cliente, ahora crearemos otro proyecto mas que lo alojaremos en el lado del servidor, veamos creamos nuevamente un proyecto con el nombre COMPLUSCliente y dentro de ella una clase DCliente, como se muestra en la siguiente estructura:





Bien este ultimo proyecto a diferencia de otros debe tener la característica de poder ser alojado en el lado del servidor y poder ejecutar transacciones, para esto este proyecto debe tener agregada la siguiente referencia a la libreria COM+ Services Type Library para cargar las clases de soporte para el manejo de transacciones y comunicacion.





Una vez realizado este dentro de la clase DCliente del proyecto COMPLUSCliente, crearemos la siguiente función como se muestra a continuaciòn casi igual que la funcion que teniamo en la clase Cliente:



Function rsClientes(ByVal xFiltro As String) As ADODB.Recordset
    'La conexión a la base de datos
    Dim cn As ADODB.Connection: Set cn = New ADODB.Connection
    Dim sql As String
    sql = "select CompanyName from Customers " & _
            "where CompanyName like '" & xFiltro & "%'" & _
            "order by CompanyName"

    cn.Open "Provider=SQLNCLI; " & _
             "Initial Catalog=Northwind; " & _
             "Data Source=PRINCESA; " & _
             "integrated security=SSPI; persist security info=True;"
     ' El recordset para acceder a los datos
    Dim rs As ADODB.Recordset: Set rs = New ADODB.Recordset

    ' Abrir el recordset de forma estática:
    rs.Open sql, cn, adOpenStatic

    Set rsClientes = rs
End Function



Ahora en el proyecto COMCliente eliminaremos la función que existía y la reemplazaremos por la siguiente función:



Function getClientes(ByVal xFiltro As String) As ADODB.Recordset
 Dim xCliente As Object
 Set xCliente = CreateObject("COMPLUSCiente.DCliente")

 Dim rs As New ADODB.Recordset
 Set rs = xCliente.rsClientes(xFiltro)

 If rs.RecordCount > 0 Then
 Set getClientes = rs
 Else
 Set getClientes = Nothing
 MsgBox "No existe datos para esta consulta"
 End If
 
End Function



Como vemos la referencias a proyectos de servicios es mediante la asigancion CreateObject y haciendo referencia al proyecto y clase a usar como se muestra en el código anterior. en el proyecto Clientes debemos modificar la consulta de la forma siguiente:



If Me.txtClientes.Text = "" Then
    MsgBox "Ingrese a lo menos un caracter", vbCritical, "Sist Clientes"
Else
 Dim xcliente As COMCliente.Cliente
 Set xcliente = New COMCliente.Cliente

 Dim rs As New ADODB.Recordset
 Set rs = xcliente.getClientes(Me.txtClientes.Text)
    'Llenamos el Listbox
    While Not rs.EOF
        Me.lstCliente.AddItem (rs!CompanyName)
        rs.MoveNext
    Wend
End If



Creando los instaladores:
Volvemos a generar los archivos compilados del proyecto Clientes y COMCliente de la misma forma como en la primera parte.
Ahora seleccionamos el proyecto COMPLUSCliente y crearemos la DLL, nos ubicamos en el servidor de componentes y nos vamos a Panel de control --> Herramientas administrativas y seleccionamos Servicios de Componentes, dentro de esta nos ubicamos hasta la raíz Aplicaciones COM+, seleccionamos y creamos una nueva aplicación como indica la figura:





Al ubicarnos en esta pestaña nos iremos hasta crear una nueva Aplicación vacía con el nombre igual al proyecto creado y en la opción de tipo de activación se debe seleccionar Aplicación de Servidor, como se ilustra aquí:





Luego en el tipo de identidad de la aplicación seleccionaremos Usuario interactivo que es el usuario creador de la aplicación y administrador del equipo y finalizamos la creación de la aplicación en el lado del servidor, una vez realizado nos desplazamos hasta la raiz de componentes de nuestra aplicacion:





Lo que haremos para finalizar esta aplicación es ubicar la dll creada COMPLUSCliente.dll la debemos seleccionar y arrastrar hasta la carpeta componentes o soltar al lado derecho seleccionado la carpeta componentes.





Y esta debe quedar como se indica en la figura anterior con esto ya estara activado nuestro componente en el lado del servidor.
Lo que nos falta es crear los instaladores para poder ser instalado en el lado del cliente para que nuestro cliente se pueda comunicar, para esto seleccionamos la aplicación COMPLUSCliente y seleccionamos la opción exportar:







En esta opción lo que crearemos es instalar nuevos componentes en el cual debemos seleccionar la ruta donde se generara el archivo instalador y escribiremos el nombre COMPUSCliente.MSI





Con esto hemos creado los instaladores al lado del cliente, donde se generaran dos archivos...





Con esto hemos completado la realización de este esquema de trabajo.


Ahora nos falta realizar pruebas de mantenimientos, como realizar algunos cambios en los componentes si que afecte a los clientes, creación de componentes mediante generacion de TLB's, La Seguridad... y como lo  hacemos en .NET... creo que primero debemos aprender como funciona actualmente varios sistemas existentes para entrar enel mundo de la plataforma .Net... Saludos.



Creacion de Componentes COM++, Desde el inicio - Parte I.

En este primer ejemplo sera, realizar una consulta de los clientes que concuerden con lo ingresado en el textbox, esta se conectara a la base Northwind del servidor de BD SQL 2008.


Bien veamos, crearemos un formulario donde el textbox se llamara txtCliente, y el listbox se llamara lstClientes, como se muestra en la siguiente imagen.





Este proyecto debe tener referenciada la biblioteca para el acceso a datos (Microsoft Activex Data Objects 2.8 Library), asi como mostramos en la siguiente figura:




Dentro del botón colocaremos la consulta hacia la base de los clientes que filtraremos para ser llenados dentro del listbox.



    'La conexión a la base de datos
    Dim cn As ADODB.Connection: Set cn = New ADODB.Connection
    Dim rs As ADODB.Recordset: Set rs = New ADODB.Recordset
      
    Dim sql As String
    sql = "select CompanyName from Customers " & _
            "where CompanyName like '" & Me.txtClientes & "%'" & _
            "order by CompanyName"

    cn.Open "Provider=SQLNCLI; " & _
             "Initial Catalog=Northwind; " & _
             "Data Source=PRINCESA; " & _
             "integrated security=SSPI; persist security info=True;"
  
    ' Abrir el recordset de forma estática:
    rs.Open sql, cn, adOpenStatic
    'Llenamos el Listbox
    While Not rs.EOF
        Me.lstCliente.AddItem (rs!CompanyName)
        rs.MoveNext
    Wend
    rs.Close
    cn.Close



Como vemos es una consulta simple, en esta primera etapa la consulta la realizamos en el mismo proyecto o capa del usuario.
Ahora realizaremos un cambio crearemos un proyecto del tipo DLL Activex, con el nombre COMCliente, donde trasladaremos esta consulta a este proyecto, con lo cual estamos logrando la separación entre la capa del usuario y la capa de acceso a datos.
La estructura de proyectos quedara como la siguiente figura:





Como tenemos dos proyectos, para lograr que estos se comuniquen debemos de crear una referencia del Proyecto Clientes agregamos una referencia al proyecto no compilado es decir al proyecto COMCliente.vbp, el compilado nos referimos recién después de generar la dll es decir al COMCliente.dll.... mas adelante veremos como hacemos esto:




Bien, ahora en este proyecto nuevo crearemos una funcion  que devuelva un recordset con la informacion de los clientes filtrados, para lo cual necesitamos enviarle el parametro del filtro, como se indica en el siguiente codigo, esto lo agregamos en la Clase Cliente del proyecto COMCliente.



Function rsClientes(ByVal xFiltro As String) As ADODB.Recordset
    'La conexión a la base de datos
    Dim cn As ADODB.Connection: Set cn = New ADODB.Connection
    Dim sql As String
    sql = "select CompanyName from Customers " & _
            "where CompanyName like '" & xFiltro & "%'" & _
            "order by CompanyName"

    cn.Open "Provider=SQLNCLI; " & _
             "Initial Catalog=Northwind; " & _
             "Data Source=PRINCESA; " & _
             "integrated security=SSPI; persist security info=True;"
     ' El recordset para acceder a los datos
    Dim rs As ADODB.Recordset: Set rs = New ADODB.Recordset

    ' Abrir el recordset de forma estática:
    rs.Open sql, cn, adOpenStatic

    Set rsClientes = rs
End Function



Una vez realizado esto, volvemos al proyecto Clientes, para usar este proyecto de acceso a datos y cargar nuestro listbox, dentro del boton mostrar escriberemos lo siguiente:



If Me.txtClientes.Text = "" Then
    MsgBox "Ingrese a lo menos un caracter", vbCritical, "Sist Clientes"
Else
 Dim xcliente As COMCliente.cliente
 Set xcliente = New COMCliente.cliente

 Dim rs As New ADODB.Recordset
 Set rs = xcliente.rsclientes(Me.txtClientes.Text)
    'Llenamos el Listbox
    While Not rs.EOF
        Me.lstCliente.AddItem (rs!CompanyName)
        rs.MoveNext
    Wend
End If



Con esta forma de trabajo separamos en capas la funcionalidad de lo que queremos hacer, como nos representa la siguiente figura, pero este tipo de DLL's son las que se alojan en el mismo cliente, el esfuerzo para consultas pesadas o es mas pesadas y con una alta concurrencia a la base de datos hara que nuestro sistema se vuelva mas pesado.
Lo realizado acá se puede representar en la siguiente figura:




Lo siguiente se realizar los ejecutables, para ser llevados a instalarse al cliente, para esto primero se debe de empezar con las DLL's de mas bajo nivel aquellas que no tengan referencia a ni un proyecto, en este caso empezaremos con COMCliente.
Seleccionamos el proyecto y en el menú archivo seleccionaremos Genera COMCliente.dll que es la compilación para la generación de la DLL.






una vez generada esta dll seleccionamos el proyecto Clientes y ahora hacemos referencia a esta dll creada.




Una vez realizado esto desde el mismo menu seleccionamos generar Clientes.exe, para crear el exe a instalar,
finalmente estos dos archivos se alojan en el cliente y previo registro de esta dll con el comando REGSVR32.






jueves, 29 de octubre de 2009

Introducción a los Servicios Web y XML.

1 Introducción a los Servicios Web y XML
1.1 Introduccion


Los Web Services representa un servicio que se puede acceder a través de una dirección http al igual que se accede a una pagina Web pero sin interfaz grafica. Los servicios Web son para poder ser implementados dentro de un proyecto Web o cliente, ofrece los mismos servicios de transmisión de información, dependiendo de los métodos publicados por el servicio Web.


Ahora con esta innovación tecnológica nacen nuevas formas de hacer negocio, las aplicaciones que interactúan en un sistema se convierten en usuarios que se involucran dentro de ellos los servicios Web procedentes de diferentes proveedores de servicio, asimismo abre nuevas formas de hacer negocio por el uso de servicios.





1.2 Crear servicios Web.
El desarrollo de aplicaciones de la plataforma .NET a revolucionado e innovado el mundo tecnológico para el uso de servidores y las herramientas de desarrollo.


La creación de servicios como su propio nombre lo indica es un componente programable que proporciona métodos accesibles por Internet, pueden funcionar en forma independiente o conectados entre si para brindar mayor funcionalidad, la tecnología de un Web Services es independiente de la plataforma a usarse, podemos involucrarnos con Web Services desarrolladas en otro tipo de lenguaje, pero si deberemos tener en cuenta que nos devuelve dicho método y así buscar en tipo de dato coherente con el que vamos a recibir.


En resumen podríamos decir:
-Son componentes que nos permiten crear aplicaciones independientes de la plataforma.
-Se pueden usar servicios Web para integrar aplicaciones escritas en lenguajes diferentes


Un servicio Web consta de los siguientes 3 elementos:


El Servicio:
Se define como software que realiza el procesamiento de documentos XML bien definidos y formados, recibidos mediante alguna combinación de protocolos de transporte y de aplicación.


El Documento XML:
Archivo que contiene toda la información especificada de la aplicación que el consumidor del servicio envía al servicio para procesar.


La Dirección:
Es una dirección de red junto con un binding de protocolo que pueden utilizarse para acceder al servicio


En la práctica, hace falta un cuarto elemento:


La Envoltura:
Es el protocolo de encapsulación de mensajes que separa el documento UML de la otra información que se quiere intercambiar


Herramientas de desarrollo para un Web Services:
Usando desde un editor de textos o WebMatrix.
Usando Visual Studio .NET


1.3 Comportamiento de una Aplicación Web
El uso de servicios Web dentro de aplicaciones Web, son aquellas en donde los usuarios se conectan a través de un servidor Web mediante una Intranet o Internet, los servicios Web pueden involucrarse dentro de ella haciendo referencia al servidor de servicios Web mediante una referencia Web.





1.4 Comportamiento de una aplicación Windows
El uso de servicios Web dentro de aplicaciones cliente pueden hacer también referencias a un servicio Web, ya que poseen la opción de hacer referencia Web que cargara todas las funcionalidades que nos proporcionan, al igual que hacer una referencia a un componente de bibliotecas de clase.





1.5 Creando un Web Services con VS 2005
Primero tenemos que agregar un nuevo proyecto de Web Services, para esto desde menú archivo seleccionamos agregar nuevo proyecto Web.





La siguiente pantalla escogeremos el proyecto tipo “ASP.NET Web Services” como indica en la figura siguiente.





Al dar aceptar dentro de nuestro explorador de soluciones, quedara agregado el proyecto como sigue:





La primera clase que aparecerá será una clase llamada Service.asmx, y esta muestra como por ejemplo por default la función “HelloWord





Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols

"http://tempuri.org/")> _
_
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class Service
     Inherits System.Web.Services.WebService

    _
    Public Function HelloWorld() As String
        Return "Hello World"
    End Function
End Class



Al ejecutar nuestro Web Services, veremos la muestra de nuestra función por default HelloWord, como se muestra aquí:



Al seleccionar la función tendremos nuevamente la descripción del SOAP a enviarse vía HTTP, el cual nos proporciona el evento para ser invocado “Invoke”.









*        Al seleccionar la ejecución de la función HelloWord, este aparecerá descripta vía XML, para ser enviada vía http, como se muestra en la figura:


xml version="1.0" encoding="utf-8" ?>
<string xmlns="http://tempuri.org/">Hello Worldstring>





Creando métodos en un Web Services.



*        Para crear métodos que se basen en Web Services, se debe agregar el atributo , que indica al sistema de tiempo de ejecución que es un método llamado a través de HTTP. No todos los métodos tienen que ser WebMethods.

Por ejemplo, dentro de la clase Service agreguemos la siguiente función:





    Private Usuario As String = "admin"
    Private Clave As String = "admin"

    _
    Public Function Login(ByVal sUsuario As String, ByVal sClave As String) As Boolean
        If Usuario = sUsuario And sClave = Clave Then
            Return True
        Else
            Return False
        End If
    End Function








*        Al compilar y ejecutar el Web Services este mostrara las dos funciones, si agregamos una nueva función sin el atributo WebMethods este no será visible como estas dos que aparecen:

















*        Ahora como bien hemos visto la función creada Login  necesita el envió de parámetros, por lo tanto al seleccionar esta función veremos que nos solicita las variables necesarias para la ejecución:




 Al invocar a esta función veremos la respuesta enviada como se muestra aquí:






  xml version="1.0" encoding="utf-8" ?>
  <boolean xmlns="http://tempuri.org/">falseboolean>



1.6 Consumiendo un Web Services con VS 2005
Para consumir un servicio Web este debe ser agregado a nuestro proyecto de donde queremos utilizarlo, para esto desde el explorador de soluciones debemos seleccionar el proyecto, Click derecho y escogemos “Agregar referencia Web”, como se muestra en la figura:



 
Ahora prestemos atención, cuando ejecutamos el proyecto de Web Services, nos salio una ruta en el explorador, esta ruta que aparece la copiaremos para agregarlo en la referencia Web.




Esta dirección guardada la colocamos en la pantalla que nos muestra al agregar la referencia Web:






Al seleccionar en el botón “Ir”, veremos nuestro servicio creado, cargado en nuestra referencia Web, al cual a nuestra referencia la llamaremos servClase5.







Finalmente en nuestro proyecto se creara la siguiente referencia Web con el nombre que colocamos anteriormente:





Bien hasta aquí en nuestro proyecto ya creamos la referencia Web, ahora crearemos un formulario con el nombre frmServicio, el cual debe quedar con el siguiente diseño.









*        Dentro de el crearemos una variable con ámbito global:
    Dim _Service As New ServClase5.Service


*        Ahora en el botón aceptar usaremos este servicio de la forma siguiente:


        If _Service.Login(Me.txtUsuario.Text, Me.txtClave.Text) Then
            MessageBox.Show("Bienvenido a mi Servicio Web", _
            "Aviso de Sistemas", _
            MessageBoxButtons.OK, _
            MessageBoxIcon.Information)
        Else
            MessageBox.Show("Ud. No tiene acceso al Servicio Web", _
            "Aviso de Sistemas", _
            MessageBoxButtons.OK, _
            MessageBoxIcon.Error)
        End If



Finalmente ejecutemos el formulario, y se vera lo siguiente:



 
2 Trabajando con XML.
2.1 Usando XML
Acrónimo de la definición de “Lenguaje de Marcas Extensible”, es un metalenguaje extensible de etiquetas desarrollado por el World Wide Web Consortium (W3C). Que representa una simplificación y adaptación del SGML que permite definir la gramática de lenguajes específicos. Por ende XML no es realmente un lenguaje en particular, sino es una forma de definir lenguajes.


Los documentos XML tienen por definición “Lenguaje de Marcas Extensible”, el contenido de un documento XML esta basado en metalenguajes de etiquetas definidas en el World Wide Web Consortium (W3C). que es una simplificación de lo normado en SGML, el cual con esto permite definir la gramática de lenguaje específicos. Por lo tanto un archivo se puede definir con etiquetas propias que puedan representar jerárquicamente cierta información.



 
Los archivos XML no solo es valido su para aplicaciones en Internet, sino que propone ser como un estándar para el intercambio de información estructurada entre diferentes plataformas y así dejar de archivos de texto con los problemas que traía al ser procesados. Los archivos XML se puede usar tanto a nivel de bases de datos, editores de texto, hojas de cálculo, etc.
 






 
Sobre los elementos:
Los elementos XML pueden tener contenido (más elementos, caracteres o ambos) como la estructura de un árbol con contenido, o también tener elementos vacíos.


Atributos
Los elementos pueden tener atributos, que son una manera de incorporar características o propiedades a los elementos de un documento XML.


Entidades predefinidas
Entidades para representar caracteres especiales para que no sean interpretados como marcado en el procesador XML, es decir para representar los símbolos Mayor o Menor y no se confunda con el abrir de una etiqueta o cierre.


Secciones CDATA
Es una construcción en XML para especificar datos utilizando cualquier carácter sin que se interprete como marcado XML, es decir realizar comentarios dentro de un archivo XML.


XML complementado con otras tecnologías ofrecen mayores posibilidades de desarrollos de aplicaciones ricas en accesos a datos, y tratamiento de información. En la actualidad permite la compatibilidad entre sistemas para compartir la información de una manera segura, fiable y de fácil acceso.





Los usos que se han desarrollado para los documentos XML con otros lenguajes no solo es útil para describir nuevos formatos de documentos Web, sino que también es usado para la descripción de datos debidamente estructurados con sus archivos de validación que acepte que esta bien definido.


Los datos estructurados son habitualmente lo que contienen las hojas de cálculo, los archivos de configuración de programas y los protocolos de red.


Los documentos XML en primer lugar a diferencia del lenguaje HTML no tienen un vocabulario fijo, por el contrario, se puede definir vocabularios específicos (Etiquetas) para determinadas aplicaciones que utilicen XML.

Las aplicaciones que realizan procesos con documentos XML, mantienen mejor los cambios de la estructura de XML que se les proporciona a las aplicaciones que utilizan otros formatos, siempre que tales cambios sea respetando la estructura del XML. Asimismo los archivo XML pueden ir acompañado de otros archivos para validación de estos, el cual se le dirá que son documentos bien formados, pueden ser para ser transformaciones y poder ser visualizados en formato HTML, en Visual Studio .NET se han desarrollado clase para el manejo de archivos XML, incluso en el detalle de crear para archivos XML con gran información como para aquellos con poca información.

Creando un archivo XML.
Para esto seleccionemos agregar nuevo elemento y seleccionamos Archivo XML.



Luego nos mostrara la siguiente pantalla, para poder agregar elementos al XML:






Que al finalizar de agregar elementos tendríamos lo siguiente:




<Empleados>
  <empleado>
    <nombres>Omar Jhonnombres>
    <apellidos>Rojas Salasapellidos>
    <area>Ventasarea>
    <codigo>V01125codigo>
  empleado>
  <empleado>
    <nombres>Carlos Albertonombres>
    <apellidos>Tomas perezapellidos>
    <area>Ventasarea>
    <codigo>V01134codigo>
  empleado>
Empleados>


2.2 Definiendo un XML
Al realizar la validación de un XML se utiliza un archivo llamado Esquema (.xsd) que se utiliza para describir la estructura y el contenido de un documento XML. Además se puede utilizar un esquema para especificar un documento que consta de uno o más elementos cada uno de los cuales contiene otros elementos secundarios.

Cuando se realiza el intercambio de documentos XML, lo que se realiza con el esquema es un mutuo acuerdo entre el productor y el consumidor del XML, ya que se tiene que validar que es lo que uno debe enviar y que es lo que uno debe recibir valido para las dos partes.

Aunque existen varios lenguajes de esquemas para los archivos XML, desde un DTD hasta XDR, el que actualmente goza de mayor popularidad es el lenguaje de definición de esquemas XML del W3C, que se suele abreviar con la extensión xsd, por ejemplo el esquema del XML anterior quedaría definido como sigue:




xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Empleados">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="empleado">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="nombres" type="xs:string" />
              <xs:element name="apellidos" type="xs:string" />
              <xs:element name="area" type="xs:string" />
              <xs:element name="codigo" type="xs:string" />
            xs:sequence>
          xs:complexType>
        xs:element>
      xs:sequence>
    xs:complexType>
  xs:element>
xs:schema>

Visual Estudio 2005 nos proporcionar una forma de ver el esquema gráficamente, el cual nos ayuda ver el esquema como esta estructurado.






2.3 Lectura y Escritura de XML con DataSet.
El DataSet nos proporciona métodos para el trabajo con XML, estos lo podemos definir tanto para lectura como para escritura, a nivel de XML como de sus respectivos esquemas.

DataSet.ReadXml (Path)
Lee los datos XML del DataSet mediante la ruta del archivo especificado, el método ReadXml ofrece una forma de leer sólo los datos o los datos de un documento XML.
        Dim Ds As New DataSet



        Ds.ReadXml("xmlEmpleados.xml"


 DataSet.ReadXmlSchema(Path)  
Lee un esquema XML en el DataSet, del archivo especificado. Se debe de usar el método ReadXmlSchema para leer el esquema para un DataSet y ser mostrado el cual incluye definiciones de tablas, relaciones y restricciones.




  Dim Ds As New DataSet
  Ds.ReadXmlSchema("xmlEmpleados.xsd")

DataSet.WriteXml (Path)
Escribe los datos actuales mostrados desde el DataSet en el archivo indicado. El método WriteXml ofrece solo de escribir sólo los datos, de un DataSet con todas las DataTables incluidos, en un documento XML.
             Dim Ds As New DataSet



         Ds.WriteXml("xmlEmpleados.xml")

DataSet.WriteXmlSchema (Path)
Escribe la estructura del DataSet como un esquema XML dentro de la ruta indicada. Se debe utilizar este método WriteXmlSchema para escribir el esquema para un DataSet en un documento XML. El esquema XML se escribe mediante el estándar XSD.




  Dim Ds As New DataSet
         Ds.WriteXmlSchema("xmlEmpleados.xsd")



Laboratorio 06
I.- Crear un XML con el nombre Productos y su esquema dentro del Servicio Web creado, el XML debe tener la siguiente estructura:




<Productos>
  <item>
    <nombre>Limpiador de Cocinanombre>
    <coodigo>L520coodigo>
    <stock>32stock>
    <precioxunidad>5.85precioxunidad>
    <precioxmayor>5.20precioxmayor>
  item>
  <item>
    <nombre>Secador de Bañonombre>
    <coodigo>SJ780coodigo>
    <stock>22stock>
    <precioxunidad>3.55precioxunidad>
    <precioxmayor>2.90precioxmayor>
  item>
  <item>
    <nombre>Papel Boldnombre>
    <coodigo>PO820coodigo>
    <stock>122stock>
    <precioxunidad>11.55precioxunidad>
    <precioxmayor>11.00precioxmayor>
  item>
Productos>

Mínimo, agregar unos 8 productos

II.- En el proyecto de Web Services crear un nuevo servicio llamado servProductos, en el cual crearemos el siguiente método. 





     _
    Public Function ProductosDet() As DataSet
        Dim ds As New DataSet
        Dim ArchivoXml As String = Server.MapPath("~") + "\Productos.xml"

        ds.ReadXml(ArchivoXml)
        Return ds

    End Function


III.- Al ejecutar nos debe mostrar las siguientes pantallas.







Así como la pantalla que invoca el método:





Finalmente analizar y revisar la información mostrada:





V.- Repetir los pasos anteriores, para mostrar mediante un método la información de los servicios de las empresas siguientes (Debes completar mínimo 10 empresas):





Así como en el punto III, este método se debe llamar ServiciosDet y se debe crear un XML con la estructura indicada.


VI.- EL formulario frmMDI, se debe modificar para agregar el siguiente ítem como muestra la figura:





VII.- Esta nueva opción primero debe levantar la opción de acceso al servicio Web configurado anteriormente frmServicio, si el usuario es valido debe mostrar el siguiente formulario llamado frmProveedores, en el cual el diseño será el siguiente:





VIII.- Dentro del botón de productos colocamos lo siguiente:


        Me.dgProveedor.DataSource = Nothing




        Dim _Servicio As New servProveedores.servProductos
        Dim ds As DataSet
        ds = _Servicio.ProductosDet
        Me.dgProveedor.DataSource = ds.Tables(0)



IX.- Asimismo configurar para el botón de servicios, y en el botón guardar se debe guardar la información con los siguientes nombres:




            Para los Productos:     xmlProductosDDMMYYYY  (Formato de Fecha actual)
            Para los Servicios:       xmlServiciosDDMMYYYY  (Formato de Fecha actual)



Concatenar con las funciones:
Now.Date.Day.ToString, Now.Date.Month.ToString y Now.Date.Year.ToString