Compartir a través de


Cómo usar el Office Web Components con datos XML generados por un servicio web XML creado mediante ASP.NET

Resumen

En este artículo paso a paso se describe cómo usar ASP.NET para crear un servicio web XML simple que recupere datos de la base de datos Northwind de ejemplo de Microsoft Access y devuelva los datos como XML a un cliente cuando el cliente llame a un método del servicio. En el lado cliente, los datos se presentan con los componentes Tabla dinámica de Office y Gráfico. En este artículo también se muestra cómo crear un cliente para el servicio web XML mediante Visual Basic .NET o Visual Basic 6.0.

Creación de un servicio web XML simple mediante ASP.NET

  1. Inicie Visual Studio. Red.

  2. En el menú Archivo , haga clic en Nuevo y, a continuación, haga clic en Proyecto. En Tipos de proyecto , haga clic en Proyectos de Visual Basic y, a continuación, haga clic en ASP.NET servicio web en

  3. ****Plantillas. Form1 se crea de forma predeterminada.

  4. Cambie la ubicación a https://localhost/MyDataService y haga clic en Aceptar. El proyecto de servicio web XML se crea en el equipo local con el nombre MyDataService. La clase Service1, que hereda de System.Web.Services.WebService, se crea de forma predeterminada en el archivo Service1.asmx.

  5. En Explorador de soluciones, haga clic con el botón derecho en Service1.asmx y, a continuación, seleccione Ver código. Esto muestra el archivo de código subyacente de la página .asmx.

  6. Agregue una referencia a la biblioteca objetos de datos de Microsoft ActiveX. Para ello, siga estos pasos:

    1. On the Project menu, click Add Reference.
    2. Haga clic en la pestaña COM , seleccione Microsoft ActiveX Data Objects 2.7 Library, haga clic en Seleccionary, a continuación, haga clic en Aceptar.
  7. Agregue el siguiente método a la clase Service1:

    <WebMethod()> Public Function GetResultsAsAdoXML() As String
        Dim myAdoRs As ADODB.Recordset
        Dim myAdoConnection As New ADODB.Connection()
        Dim mypersiststream As New ADODB.Stream()
    
    Dim myConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
           "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
        Dim mySelect As String = "SELECT * from [Category Sales for 1997]"
    
    myAdoConnection.ConnectionString = myConnectionString
        myAdoConnection.Open()
        myAdoRs = myAdoConnection.Execute(mySelect)
        myAdoRs.Save(mypersiststream, ADODB.PersistFormatEnum.adPersistXML)
        Return mypersiststream.ReadText
    End Function
    

    Nota:

    Si no ha instalado Office XP en la carpeta predeterminada (C:\Archivos de programa\Microsoft Office), modifique la cadena de conexión en el código para reflejar la ruta de acceso correcta para la instalación de Office. Además, si ha instalado Office 2003, es posible que tenga que cambiar la ruta de acceso en consecuencia.

  8. En el menú Compilar , haga clic en Compilar solución para compilar el servicio web XML.

Prueba del servicio web XML

  1. En el menú Depurar , haga clic en Iniciar. Microsoft Internet Explorer se inicia y busca en el archivo Service1.asmx.
  2. Haga clic en el hipervínculo GetResultsAsAdoXML .
  3. Haga clic en Invocar para probar la llamada al método. Una nueva ventana muestra los resultados de la consulta Ventas por categorías de 1997 en el formato de esquema de conjunto de filas XML. El documento XML del conjunto de filas se incluye en el elemento string.
  4. En el menú Depurar de Visual Studio .NET, haga clic en Detener depuración.

Compilación de un cliente para el servicio web XML

En esta sección se describe cómo crear un cliente para consumir el servicio web XML MyDataService. Puede crear el cliente con Visual Basic 6.0 o Visual Basic .NET.

Para fines de demostración, los pasos describen cómo compilar el cliente de prueba en el mismo equipo que el servicio web XML. Sin embargo, puede compilar los clientes de prueba en cualquier equipo que pueda examinar el archivo wsdl (Lenguaje de descripción de servicios web) que expone el servicio web.

Uso de Visual Basic .NET

  1. Cree un nuevo proyecto de aplicación de Windows de .NET de Visual Basic. Form1 se crea de forma predeterminada.

  2. Presione CTRL+ALT+X para mostrar el cuadro de herramientas.

  3. En el menú Herramientas , haga clic en Personalizar cuadro de herramientas. Seleccione los siguientes elementos en la lista de componentes y, a continuación, haga clic en Aceptar:

    • Gráfico de Microsoft Office 10.0
    • Control de origen de datos de Microsoft Office 10.0
    • Tabla dinámica de Microsoft Office 10.0
      Los iconos de los componentes aparecen en el cuadro de herramientas.
  4. Agregue un control Chart, un control de tabla dinámica y un control de origen de datos a Form1. Ajuste el tamaño y coloque el formulario y los controles según sea necesario.

  5. Agregue un control Button a Form1 y, a continuación, establezca la propiedad Text del control en Rellenar datos.

  6. Agregue una referencia al servicio web XML de ejemplo. Para ello, siga estos pasos:

    1. En el menú Proyecto, haga clic en Agregar referencia web. Aparece el cuadro de diálogo Agregar referencia web .
    2. En el cuadro de texto Dirección , escriba http:// localhost/MyDataService/Service1.asmx?wsdl y presione ENTRAR. El archivo WSDL se muestra en el cuadro de diálogo.

    Nota: Si MyDataService no reside en el equipo local, reemplace localhost en la dirección por el nombre del servidor web en el que reside MyDataService.
    3. En el cuadro de diálogo, haga clic en Agregar referencia.

  7. Haga doble clic en el control Botón en Form1 y, a continuación, reemplace el controlador de Button1_Click por el código siguiente:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
    'Reference to the service.
        Dim objClient As New localhost.Service1()
    
    'Result obtained from the Service method.
        Dim strresult As String
    
    'The results will be stored on this disk file.
        Dim datafile As String
    
    datafile = System.IO.Directory.GetCurrentDirectory() + "\\mydata.xml"
    
    'Call the Web service method GetResultsAsAdoXML, which returns the recordset as XML.
        strresult = objClient.GetResultsAsAdoXML()
    
    Dim oxmldoc As New System.Xml.XmlDocument()
    
    'Load the XML recordset into the XML Document object.
        oxmldoc.LoadXml (strresult)
    
    'Save it to disk file.
        oxmldoc.Save (datafile)
    
    'Get data in the DataSource component.
        If Len(AxDataSourceControl1.ConnectionString) = 0 Then
            AxDataSourceControl1.ConnectionString = "provider=mspersist"
            AxDataSourceControl1.RecordsetDefs.AddNew( _
                  datafile, AxDataSourceControl1.Constants.dscCommandFile, "ChartData")
        End If
    
    'Get data in Chart component.
        Dim c
        Dim cht As OWC10.ChChart
        Dim ser As OWC10.ChSeries
        Dim ax As OWC10.ChAxis
    
    c = AxChartSpace1.Constants
        ' Clear the ChartSpace.
        AxChartSpace1.Clear()
    
    'DataSource to the Chart component.
        AxChartSpace1.DataSource = AxDataSourceControl1.DefaultRecordset.DataSource
    
    'Get the reference to Chart within the ChartSpace component.
        cht = AxChartSpace1.Charts(0)
        cht.Type = c.chChartTypeBarStacked
        cht.HasLegend = True
        cht.Legend.Position = c.chLegendPositionTop
        cht.HasTitle = True
        cht.Title.Caption = "Category Sales for 1997"
    
    'Set the Chart data.
        AxChartSpace1.SetData(OWC10.ChartDimensionsEnum.chDimCategories, 0, "CategoryName")
        AxChartSpace1.SetData(OWC10.ChartDimensionsEnum.chDimValues, 0, "CategorySales")
    
    ax = cht.Axes(c.chAxisPositionBottom)
    
    'Set the series attributes.
        ser = cht.SeriesCollection(0)
        ser.Name = "Category Sales"
        ser.Caption = ser.Name
        ser.Marker.Size = 4
    
    'Get Data in the PivotTable component.
        Dim pview As OWC10.PivotView
        AxPivotTable1.AutoFit = True
        AxPivotTable1.ConnectionString = "provider=mspersist"
        AxPivotTable1.CommandText = datafile
        pview = AxPivotTable1.ActiveView
        pview.AutoLayout()
        pview.FilterAxis.Label.Visible = False
        pview.RowAxis.Label.Visible = False
        pview.ColumnAxis.Label.Visible = False
        pview.TitleBar.Visible = False
    
    End Sub
    
    

    Nota Si el servicio web XML está en un equipo independiente, declare la variable objClient de la siguiente manera:

     Dim objClient As New <servername>.Service1()
    

    Donde servername es el nombre del servidor en el que reside el servicio web XML.

  8. Nota Si usa Office 2003, es posible que tenga que cambiar las referencias en consecuencia.

  9. Agregue el código siguiente a la parte superior de Form1.vb:

    Imports OWC10 = Microsoft.Office.Interop.OWC
    
    
  10. En el menú Depurar , haga clic en Iniciar para compilar y ejecutar el programa cliente. Aparece Form1.

  11. Haga clic en Rellenar datos para presentar datos en los controles Gráfico y Tabla dinámica.

Uso de Visual Basic 6.0

Los servicios web XML se comunican con los clientes mediante mensajes de Protocolo simple de acceso a objetos (SOAP). Si la aplicación cliente es compatible con SOAP, puede llamar a los métodos que expone el servicio web XML. Los equipos cliente no necesitan tener visual Studio .NET instalado para llamar a métodos en el servicio web XML. El cliente debe tener la capacidad de enmarcar llamadas de método de servicio web XML como solicitudes SOAP y recibir los resultados de las llamadas al método como respuestas SOAP. El kit de herramientas SOAP le permite hacer esto.

Para obtener más información sobre soap toolkit, incluidas las instrucciones de descarga, consulte el siguiente sitio web de Microsoft Developer Network (MSDN): SOAP Toolkit

Para crear un cliente de prueba de Visual Basic 6.0 para consumir métodos en el servicio web XML MyDataService, siga estos pasos:

Nota:

Este cliente de prueba requiere que SOAP Toolkit 2.0 Service Pack 2 esté instalado en el equipo.

  1. Inicie Visual Basic 6.0 y cree un nuevo proyecto EXE estándar. Form1 se crea de forma predeterminada.

  2. En el menú Proyecto , haga clic en Referencias. Agregue las siguientes referencias al proyecto:

    • Biblioteca de tipos soap de Microsoft
    • Microsoft XML, v3.0
  3. En el menú Proyecto , haga clic en Componentes. Seleccione Microsoft Office XP Web Components (Componentes web de Microsoft Office XP) y, a continuación, haga clic en Aceptar.

  4. Agregue el siguiente Office Web Components a Form1:

    • Gráfico de Microsoft Office 10.0
    • Control de origen de datos de Microsoft Office 10.0
    • Tabla dinámica de Microsoft Office 10.0
  5. Agregue un control CommandButton a Form1 y establezca la propiedad Caption del botón en Rellenar datos.

  6. Haga doble clic en el control CommandButton y reemplace el controlador de Command1_Click por el código siguiente:

    Private Sub Command1_Click()
      Dim osoapClient As MSSOAPLib.SoapClient
    
    'Initialize the SOAP client object.
      Set osoapClient = CreateObject("MSSOAP.SoapClient")
      osoapClient.mssoapinit "https://localhost/MyDataService/Service1.asmx?wsdl", "Service1", "Service1Soap"
    
    'DOM object to load the results.
      Dim oXMLDoc As New MSXML2.DOMDocument
      Dim strdirname As String
    
    'File to store XML recordset.
      strdirname = FileSystem.CurDir$ + "\mydata.xml"
    
    Dim strxmlrecordset As String
    
    'Call the WebService method.
      strxmlrecordset = osoapClient.GetResultsAsAdoXML()
    
    'Load the XML in the DOM document.
      oXMLDoc.loadXML strxmlrecordset
    
    'Save it to the disk file.
      oXMLDoc.Save (strdirname)
    
    'Get the data into the DataSourceControl1 component.
      If Len(DataSourceControl1.ConnectionString) = 0 Then
         DataSourceControl1.ConnectionString = "provider=mspersist"
         ' Add a RecordsetDef with name ChartData to the DataSourceControl1
         DataSourceControl1.RecordsetDefs.AddNew strdirname, DataSourceControl1.Constants.dscCommandFile, "ChartData"
      End If
    
    'Get the Data into the Chart component.
      Dim c
      Dim cht As ChChart
      Dim chart1 As ChChart
      Dim ser As ChSeries
      Dim ax As ChAxis
    
    Set c = ChartSpace1.Constants
      ChartSpace1.Clear
    
    'DataSource to the Chart component.
      ChartSpace1.DataSource = DataSourceControl1.DefaultRecordset.DataSource
    
    ' Draw the chart.
      Set cht = ChartSpace1.Charts(0)
      cht.Type = c.chChartTypeBarStacked
      cht.HasLegend = True
      cht.Legend.Position = c.chLegendPositionTop
      cht.HasTitle = True
      cht.Title.Caption = "Category Sales for 1997"
    
    'Set the chart data.
      ChartSpace1.SetData chDimCategories, 0, "CategoryName"
      ChartSpace1.SetData chDimValues, 0, "CategorySales"
    
    ' Set the tick label spacing depending on the number of points plotted.
      Set ax = cht.Axes(c.chAxisPositionBottom)
    
    'Set the series attributes.
      Set ser = cht.SeriesCollection(0)
      ser.Name = "Category Sales"
      ser.Caption = ser.Name
      ser.Marker.Size = 4
    
    'Get the data into the PivotTable.
      PivotTable1.ConnectionString = "provider=mspersist"
      PivotTable1.CommandText = strdirname
      PivotTable1.AutoFit = True
      Set pview = PivotTable1.ActiveView
      pview.AutoLayout
      pview.FilterAxis.Label.Visible = False
      pview.RowAxis.Label.Visible = False
      pview.ColumnAxis.Label.Visible = False
      pview.TitleBar.Visible = False
    End Sub
    
    

    Nota Si el servicio web XML reside en un equipo independiente, reemplace localhost en la dirección del servicio web XML por el nombre del servidor en el que reside el servicio web XML.

  7. Presione F5 para compilar y ejecutar el programa. Aparece Form1.

  8. Haga clic en Rellenar datos para presentar datos en los componentes Gráfico y Tabla dinámica.

Referencias

Para obtener más información sobre los servicios web XML creados mediante ASP.NET, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

301273 Cómo escribir un servicio web simple mediante Visual Basic .NET

Para obtener más información sobre los servicios web XML creados mediante ASP.NET, vea el tema "Programación de web con servicios web" en la Ayuda de Visual Studio .NET o el tema "ASP.NET Web Services and ASP.NET Web Service Clients" en la Guía del desarrollador de Microsoft .NET Framework.

Para obtener información adicional sobre los servicios esenciales del servicio web y los servicios web XML creados mediante ASP.NET, visite el siguiente sitio web de Microsoft Developer Network (MSDN):

https://msdn.microsoft.com/en-us/library/ba0z6a33.aspx

Para obtener información adicional sobre el desarrollo de Microsoft Office con Visual Studio y Office XP Web Components, visite el siguiente sitio web de MSDN:

https://msdn.microsoft.com/en-us/library/aa188489(office.10).aspx