Paso 3: acceso al servicio web
Última modificación: jueves, 21 de enero de 2010
Hace referencia a: SharePoint Server 2010
Después de agregar una referencia a Servicios web de Excel al proyecto, el siguiente paso consiste en crear una instancia de clase de proxy del servicio web. A continuación, se puede obtener acceso a los métodos del servicio web mediante una llamada a los métodos de la clase de proxy. Cuando la aplicación llama a estos métodos, el código de clase de proxy generado por Visual Studio controla las comunicaciones entre la aplicación y el servicio web.
Primero se crea una instancia de la clase de proxy del servicio web, ExcelWebService. A continuación, se pueden llamar varios métodos y propiedades del servicio web mediante la clase de proxy.
Las llamadas para abrir un libro se usan para obtener un identificador de sesión, pasar las credenciales predeterminadas, definir el objeto de coordenadas del rango, obtener el rango que usa el objeto de coordenadas de rango, cerrar el libro y detectar las excepciones SOAP.
Obtener acceso al servicio web
Para agregar directivas
Cuando antes agregó la referencia web, creó un objeto llamado ExcelService en un espacio de nombres denominado <proyecto>.<nombreDeReferenciaWeb>. En este ejemplo, el objeto se denomina SampleApplication.ExcelWebService. En este tutorial también se muestra cómo detectar excepciones SOAP. Para ello, se usa el objeto System.Web.Services.Protocols. El espacio de nombres System.Web.Services.Protocols consta de las clases que definen los protocolos que se usan para transmitir datos a través del cable durante la comunicación entre los clientes del servicio web XML y los servicios web XML creados mediante ASP.NET.
Para facilitar el uso de estos objetos, primero debe agregar los espacios de nombres como directivas al archivo Class1.cs. De este modo, si usa estas directivas, no tendrá que introducir los tipos completos en el espacio de nombres.Para agregar estas directivas, agregue el siguiente código al principio del código del archivo Class1.cs, después de using System:
using SampleApplication.ExcelWebService; using System.Web.Services.Protocols;
Imports SampleApplication.ExcelWebService Imports System.Web.Services.Protocols
Para llamar al servicio web
Cree instancias e inicialice el objeto proxy del servicio web mediante la adición del siguiente código después del corchete de apertura en static void Main(string[] args):
ExcelService es = new ExcelService();
Dim es As New ExcelService()
Agregue el siguiente código para crear una matriz de estado y objetos de coordenadas de rango:
Status[] outStatus; RangeCoordinates rangeCoordinates = new RangeCoordinates();
Dim outStatus() As Status Dim rangeCoordinates As New RangeCoordinates()
Agregue el código para que señale a la hoja de cálculo a la que desea tener acceso. En este ejemplo, la hoja de cálculo se llama a "Sheet1". Agregue lo siguiente al código:
string sheetName = "Sheet1";
Dim sheetName As String = "Sheet1"
Nota
Asegúrese de que el libro que desea abrir tiene una hoja de cálculo denominada "Sheet1" que contiene los valores. Si lo prefiere, puede cambiar "Sheet1" en el código por el nombre de la hoja de cálculo.
Agregue el siguiente código para señalar el libro que desea abrir:
string targetWorkbookPath = "http://myserver02/example/Shared%20Documents/Book1.xlsx";
Dim targetWorkbookPath As String = "http://myserver02/example/Shared%20Documents/Book1.xlsx"
Importante Cambie la ruta de acceso al libro para que coincida con la ubicación del libro que usa para este tutorial. Asegúrese de que el libro existe y de que la ubicación donde se guarda el libro es de confianza. Si usa una dirección URL HTTP para señalar la ubicación de un libro, podrá tener acceso a él de forma remota.
Nota
Para obtener la ruta de acceso a un libro de Microsoft SharePoint Server 2010, haga clic con el botón secundario en el libro y seleccione Copiar acceso directo. También puede seleccionar Propiedades y copiar la ruta al libro de trabajo desde esta ubicación.
Agregue el siguiente código para establecer las credenciales para la solicitud.
Nota
Tendrá que establecer explícitamente las credenciales incluso si se van a usar las credenciales predeterminadas.
es.Credentials = System.Net.CredentialCache.DefaultCredentials;
es.Credentials = System.Net.CredentialCache.DefaultCredentials
Agregue el siguiente código para abrir el libro y señalar a la ubicación de confianza donde se encuentra el libro. Coloque el código en un bloque try:
try { string sessionId = es.OpenWorkbook(targetWorkbookPath, "en-US", "en-US", out outStatus);
Try Dim sessionId As String = es.OpenWorkbook(targetWorkbookPath, "en-US", "en-US", outStatus)
Agregue el siguiente código para preparar un objeto para que defina las coordenadas de intervalo y llame al método GetRange. El código también imprimirá el número total de filas del rango y el valor de un intervalo determinado.
rangeCoordinates.Column = 3; rangeCoordinates.Row = 9; rangeCoordinates.Height = 18; rangeCoordinates.Width = 12; object[] rangeResult1 = es.GetRange(sessionId, sheetName, rangeCoordinates, false, out outStatus); Console.WriteLine("Total rows in range: " + rangeResult1.Length); Console.WriteLine("Value in range is: " + ((object[])rangeResult1[5])[2]);
rangeCoordinates.Column = 3 rangeCoordinates.Row = 9 rangeCoordinates.Height = 18 rangeCoordinates.Width = 12 Dim rangeResult1() As Object = es.GetRange(sessionId, sheetName, rangeCoordinates, False, outStatus) Console.WriteLine("Total rows in range: " & rangeResult1.Length) Console.WriteLine("Value in range is: " & (CType(rangeResult1(5), Object()))(2))
Agregue código para cerrar el libro y cierre la sesión actual. Agregue también un corchete de cierre para terminar el bloque try.
Importante Se recomienda cerrar el libro si ha terminado con la sesión. Esto cerrará la sesión y liberará recursos.
es.CloseWorkbook(sessionId); }
es.CloseWorkbook(sessionId)
Agregue un bloque catch para detectar la excepción SOAP e imprimir el mensaje de excepción:
catch (SoapException e) { Console.WriteLine("SOAP Exception Message: {0}", e.Message); }
Catch e As SoapException Console.WriteLine("SOAP Exception Message: {0}", e.Message) End Try
Código completo
El ejemplo de código siguiente es el código completo del archivo de ejemplo Class1.cs que se describe en los procedimientos anteriores.
Importante |
---|
Modifique la ruta de acceso del libro, el nombre de la hoja y así sucesivamente, según corresponda. |
using System;
using SampleApplication.ExcelWebService;
using System.Web.Services.Protocols;
namespace SampleApplication
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
// Instantiate the Web service and create a status array object and range coordinate object
ExcelService es = new ExcelService();
Status[] outStatus;
RangeCoordinates rangeCoordinates = new RangeCoordinates();
string sheetName = "Sheet1";
// Using workbookPath this way will allow
// you to call the workbook remotely.
// TODO: change the workbook path to
// point to workbook in a trusted location
// that you have access to
string targetWorkbookPath = "http://myserver02/example/Shared%20Documents/Book1.xlsx";
//you can also use .xlsb files, for example, //"http://myserver02/example/Shared%20Documents/Book1.xlsb";
// Set credentials for requests
es.Credentials = System.Net.CredentialCache.DefaultCredentials;
//Console.WriteLine("Cred: {0}", es.Credentials);
try
{
// Call open workbook, and point to the trusted
// location of the workbook to open.
string sessionId = es.OpenWorkbook(targetWorkbookPath, "en-US", "en-US", out outStatus);
// Console.WriteLine("sessionID : {0}", sessionId);
// Prepare object to define range coordinates
// and the GetRange method.
rangeCoordinates.Column = 3;
rangeCoordinates.Row = 9;
rangeCoordinates.Height = 18;
rangeCoordinates.Width = 12;
object[] rangeResult1 = es.GetRange(sessionId, sheetName, rangeCoordinates, false, out outStatus);
Console.WriteLine("Total Rows in Range: " + rangeResult1.Length);
Console.WriteLine("Value in range is: " + ((object[])rangeResult1[5])[3]);
// Close workbook. This also closes session.
es.CloseWorkbook(sessionId);
}
catch (SoapException e)
{
Console.WriteLine("SOAP Exception Message: {0}", e.Message);
}
// catch (Exception e)
// {
// Console.WriteLine("Exception Message: {0}", e.Message);
// }
// Console.ReadLine();
}
}
}
Imports System
Imports SampleApplication.ExcelWebService
Imports System.Web.Services.Protocols
Namespace SampleApplication
Friend Class Class1
<STAThread> _
Shared Sub Main(ByVal args() As String)
' Instantiate the Web service and create a status array object and range coordinate object
Dim es As New ExcelService()
Dim outStatus() As Status
Dim rangeCoordinates As New RangeCoordinates()
Dim sheetName As String = "Sheet1"
' Using workbookPath this way will allow
' you to call the workbook remotely.
' TODO: change the workbook path to
' point to workbook in a trusted location
' that you have access to
Dim targetWorkbookPath As String = "http://myserver02/example/Shared%20Documents/Book1.xlsx"
'you can also use .xlsb files, for example, //"http://myserver02/example/Shared%20Documents/Book1.xlsb";
' Set credentials for requests
es.Credentials = System.Net.CredentialCache.DefaultCredentials
'Console.WriteLine("Cred: {0}", es.Credentials);
Try
' Call open workbook, and point to the trusted
' location of the workbook to open.
Dim sessionId As String = es.OpenWorkbook(targetWorkbookPath, "en-US", "en-US", outStatus)
' Console.WriteLine("sessionID : {0}", sessionId)
' Prepare object to define range coordinates
' and the GetRange method.
rangeCoordinates.Column = 3
rangeCoordinates.Row = 9
rangeCoordinates.Height = 18
rangeCoordinates.Width = 12
Dim rangeResult1() As Object = es.GetRange(sessionId, sheetName, rangeCoordinates, False, outStatus)
Console.WriteLine("Total Rows in Range: " & rangeResult1.Length)
Console.WriteLine("Value in range is: " & (CType(rangeResult1(5), Object()))(3))
' Close workbook. This also closes session.
es.CloseWorkbook(sessionId)
Catch e As SoapException
Console.WriteLine("SOAP Exception Message: {0}", e.Message)
' Catch e As Exception
' Console.WriteLine("Exception Message: {0}", e.Message)
End Try
'Console.ReadLine()
End Sub
End Class
End Namespace
Vea también
Tareas
Paso 1: Crear el proyecto cliente del servicio web
Paso 2: Agregar una referencia web
Paso 4: Crear y probar la aplicación
Tutorial: Desarrollar una aplicación personalizada mediante Excel Web Services
Conceptos
Obtener acceso a la API de SOAP
Otros recursos
Procedimiento para confiar en ubicaciones de libro mediante secuencia de comandos