Этап 3. Получение доступа к веб-службе
Дата последнего изменения: 21 января 2010 г.
Применимо к: SharePoint Server 2010
Следующим этапом после добавления ссылки на веб-службы Excel в проект является создание экземпляра прокси-класса веб-службы. Затем можно будет получить доступ к методам веб-службы путем вызова методов в прокси-классе. Когда приложение вызывает эти методы, код прокси-класса созданный Visual Studio, обрабатывает обмен данными между приложением и веб-службой.
Сначала требуется создать экземпляр прокси-класса веб-службы ExcelWebService. Затем с помощью прокси-класса выполняется вызов различных методов и свойств веб-службы.
Такие вызовы используются для открытия книги, получения кода сеанса, предъявления стандартных учетных данных, определения объекта координат диапазона, получения диапазона, использующего объект координат диапазона, закрытия книги и перехвата исключений SOAP.
Получение доступа к веб-службе
Добавление директив
При добавлении веб-ссылки она создает объект с именем ExcelService в пространстве имен, которое называется <ваш_проект>.<имя_веб_ссылки>. В этом примере объект носит имя SampleApplication.ExcelWebService. В данном пошаговом руководстве также рассматривается перехват исключений SOAP. Для этого используется объект System.Web.Services.Protocols. Пространство имен System.Web.Services.Protocols состоит из классов, определяющих протоколы, которые используются для передачи данных по проводной сети в ходе взаимодействия клиентов веб-службы XML с веб-службами XML, созданными с помощью ASP.NET.
Для упрощения использования этих объектов необходимо сначала добавить пространства имен в качестве директив в файл Class1.cs. В этом случае при использовании таких директив не требуется указывать полные имена типов в пространстве имен.Для добавления таких директив добавьте следующий код в начало собственного кода в файле Class1.cs после элемента using System:
using SampleApplication.ExcelWebService; using System.Web.Services.Protocols;
Imports SampleApplication.ExcelWebService Imports System.Web.Services.Protocols
Вызов веб-службы
Выполните создание экземпляра и инициализацию прокси-объекта веб-службы путем добавления следующего кода после открывающей скобки в строке static void Main(string[] args):
ExcelService es = new ExcelService();
Dim es As New ExcelService()
Для создания массива состояний и объектов координат диапазона добавьте следующий код:
Status[] outStatus; RangeCoordinates rangeCoordinates = new RangeCoordinates();
Dim outStatus() As Status Dim rangeCoordinates As New RangeCoordinates()
Добавьте код, чтобы указать лист, к которому требуется получить доступ. В этом примере лист называется Sheet1. Добавьте в свой код следующее:
string sheetName = "Sheet1";
Dim sheetName As String = "Sheet1"
Примечание Убедитесь, что в книге, которую вы хотите открыть, есть лист Sheet1, содержащий значения. Аналогично можно заменить имя Sheet1 в коде на другое имя листа.
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 можно, щелкнув ее правой кнопкой мыши и выбрав в меню пункт Копировать ярлык. Аналогично можно выбрать пункт Свойства и скопировать путь к рабочей книге в этом окне.
Добавьте следующий код, чтобы указать учетные данные для запроса.
Примечание Требуется явно задать учетные данные, даже если вы намерены использовать учетные данные по умолчанию.
es.Credentials = System.Net.CredentialCache.DefaultCredentials;
es.Credentials = System.Net.CredentialCache.DefaultCredentials
Добавьте следующий код, чтобы открыть книгу и указать надежное расположение, где размещается эта книга. Поместите код в блок 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)
Добавьте следующий код, чтобы подготовить объект для определения координат диапазона и вызвать метод 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))
Добавьте код, чтобы закрыть рабочую книгу и завершить текущий сеанс. Затем добавьте закрывающую скобку в конце блока try.
Важно! Рекомендуется закрыть книгу при завершении работы с сеансом. Это приведет к закрытию сеанса и освобождению ресурсов.
es.CloseWorkbook(sessionId); }
es.CloseWorkbook(sessionId)
Добавьте блок 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. Создание проекта клиента веб-службы
Этап 4. Построение и тестирование приложения
Пошаговое руководство. Разработка настраиваемого приложения с помощью веб-служб Excel