Шаг 3. Получение доступа к веб-службе
Следующим этапом после добавления ссылки на веб-службы Веб-службы Excel в проект является создание экземпляра прокси-класса веб-службы. Затем можно будет получить доступ к методам веб-службы путем вызова методов в прокси-классе. Когда приложение вызывает эти методы, код прокси-класса созданный Visual Studio, обрабатывает обмен данными между приложением и веб-службой.
Сначала требуется создать экземпляр прокси-класса веб-службы ExcelWebService. Затем с помощью прокси-класса выполняется вызов различных методов и свойств веб-службы. Такие вызовы используются для открытия книги, получения кода сеанса, предъявления стандартных учетных данных, определения объекта координат диапазона, получения диапазона, использующего объект координат диапазона, закрытия книги и перехвата исключений SOAP.
Получение доступа к веб-службе
Добавление директив
- Когда вы добавили веб-ссылку ранее, она создала объект с именем ExcelService в пространстве <имен yourProject>.< webReferenceName>. In this example, the object is named SampleApplication.ExcelWebService. This walkthrough also shows how to catch SOAP exceptions. To do so, you use the System.Web.Services.Protocols object. The System.Web.Services.Protocols namespace consists of the classes that define the protocols used to transmit data across the wire during the communication between XML Web service clients and XML Web services created using 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 в коде на другое имя листа.
Добавьте приведенный ниже код, чтобы указать на книгу, которую вы хотите открыть.
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