Поделиться через


Этап 3. Получение доступа к веб-службе

Дата последнего изменения: 21 января 2010 г.

Применимо к: SharePoint Server 2010

Следующим этапом после добавления ссылки на веб-службы Excel в проект является создание экземпляра прокси-класса веб-службы. Затем можно будет получить доступ к методам веб-службы путем вызова методов в прокси-классе. Когда приложение вызывает эти методы, код прокси-класса созданный Visual Studio, обрабатывает обмен данными между приложением и веб-службой.

Сначала требуется создать экземпляр прокси-класса веб-службы ExcelWebService. Затем с помощью прокси-класса выполняется вызов различных методов и свойств веб-службы.

Такие вызовы используются для открытия книги, получения кода сеанса, предъявления стандартных учетных данных, определения объекта координат диапазона, получения диапазона, использующего объект координат диапазона, закрытия книги и перехвата исключений SOAP.

Получение доступа к веб-службе

Добавление директив

  1. При добавлении веб-ссылки она создает объект с именем ExcelService в пространстве имен, которое называется <ваш_проект>.<имя_веб_ссылки>. В этом примере объект носит имя SampleApplication.ExcelWebService. В данном пошаговом руководстве также рассматривается перехват исключений SOAP. Для этого используется объект System.Web.Services.Protocols. Пространство имен System.Web.Services.Protocols состоит из классов, определяющих протоколы, которые используются для передачи данных по проводной сети в ходе взаимодействия клиентов веб-службы XML с веб-службами XML, созданными с помощью ASP.NET.
    Для упрощения использования этих объектов необходимо сначала добавить пространства имен в качестве директив в файл Class1.cs. В этом случае при использовании таких директив не требуется указывать полные имена типов в пространстве имен.

  2. Для добавления таких директив добавьте следующий код в начало собственного кода в файле Class1.cs после элемента using System:

    using SampleApplication.ExcelWebService;
    using System.Web.Services.Protocols;
    
    Imports SampleApplication.ExcelWebService
    Imports System.Web.Services.Protocols
    

Вызов веб-службы

  1. Выполните создание экземпляра и инициализацию прокси-объекта веб-службы путем добавления следующего кода после открывающей скобки в строке static void Main(string[] args):

    ExcelService es = new ExcelService();
    
    Dim es As New ExcelService()
    
  2. Для создания массива состояний и объектов координат диапазона добавьте следующий код:

    Status[] outStatus;
    RangeCoordinates rangeCoordinates = new RangeCoordinates();
    
    Dim outStatus() As Status
    Dim rangeCoordinates As New RangeCoordinates()
    
  3. Добавьте код, чтобы указать лист, к которому требуется получить доступ. В этом примере лист называется Sheet1. Добавьте в свой код следующее:

    string sheetName = "Sheet1";
    
    Dim sheetName As String = "Sheet1"
    
    ПримечаниеПримечание

    Убедитесь, что в книге, которую вы хотите открыть, есть лист Sheet1, содержащий значения. Аналогично можно заменить имя Sheet1 в коде на другое имя листа.

  4. Add the following code to point to the workbook you want to open:

    string targetWorkbookPath = "http://myserver02/example/Shared%20Documents/Book1.xlsx";
    
    Dim targetWorkbookPath As String = "http://myserver02/example/Shared%20Documents/Book1.xlsx"
    
    Важное примечаниеВажно!

    Измените путь к книге, чтобы он соответствовал расположению книги, используемому в данном руководстве. Убедитесь, что книга существует и что расположение, где она хранится, является надежным расположением. Использование URL-адреса в формате HTTP для указания расположения книги позволяет получать к ней удаленный доступ.

    ПримечаниеПримечание

    Получить путь к книге в Microsoft SharePoint Server 2010 можно, щелкнув ее правой кнопкой мыши и выбрав в меню пункт Копировать ярлык. Аналогично можно выбрать пункт Свойства и скопировать путь к рабочей книге в этом окне.

  5. Добавьте следующий код, чтобы указать учетные данные для запроса.

    ПримечаниеПримечание

    Требуется явно задать учетные данные, даже если вы намерены использовать учетные данные по умолчанию.

    es.Credentials = System.Net.CredentialCache.DefaultCredentials;
    
    es.Credentials = System.Net.CredentialCache.DefaultCredentials
    
  6. Добавьте следующий код, чтобы открыть книгу и указать надежное расположение, где размещается эта книга. Поместите код в блок 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)
    
  7. Добавьте следующий код, чтобы подготовить объект для определения координат диапазона и вызвать метод GetRange. Код также выполнит печать общего количества строк в диапазоне и значений в конкретном диапазоне.

    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))
    
  8. Добавьте код, чтобы закрыть рабочую книгу и завершить текущий сеанс. Затем добавьте закрывающую скобку в конце блока try.

    Важное примечаниеВажно!

    Рекомендуется закрыть книгу при завершении работы с сеансом. Это приведет к закрытию сеанса и освобождению ресурсов.

    es.CloseWorkbook(sessionId);
    }
    
    es.CloseWorkbook(sessionId)
    
  9. Добавьте блок catch для перехвата исключений SOAP и печати сообщения об исключении:

    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
    

Полный пример кода

Приведенный ниже пример кода представляет собой полный фрагмент кода в файле примера Class1.cs, который описывается выше.

Важное примечаниеВажно!

Внесите необходимые изменения в путь рабочей книги, имя листа и т. д.

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

См. также

Задачи

Шаг 1. Создание проекта клиента веб-службы

Этап 2. Добавление веб-ссылки

Этап 4. Построение и тестирование приложения

Пошаговое руководство. Разработка настраиваемого приложения с помощью веб-служб Excel

Концепции

Доступ к API-интерфейсу SOAP

Другие ресурсы

How to: Trust Workbook Locations Using Script