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


Практическое руководство. Перехват исключений

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

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

Разделы кода, которые могут создавать исключения, помещаются в блок try, а код, обрабатывающий исключения, — в блок catch. Порядок сегментов catch очень важен. При возникновении исключения оно передается по стеку и каждому блоку catch предоставляется возможность его обработать. Блок catch, которому надлежит обработать исключение, определяется на основе совпадения типа исключения с именем исключения, указанного в блоке catch. Например, следующий блок catch осуществляет перехват исключений SOAP:

catch (SoapException e)
{
    Console.WriteLine("SOAP Exception Error Code: {0}", 
        e.SubCode.Code.Name);
    Console.WriteLine("SOAP Exception Message is: {0}", 
        e.Message);
}
Catch e As SoapException
    Console.WriteLine("SOAP Exception Error Code: {0}", e.SubCode.Code.Name)
    Console.WriteLine("SOAP Exception Message is: {0}", e.Message)
End Try

Если блок catch для данного типа не существует, исключение перехватывается общим блоком catch при его наличии. Например, для перехвата общих исключений можно добавить следующий код:

catch (Exception e)
{
    Console.WriteLine("Exception Message: {0}", e.Message);
}
Catch e As Exception
    Console.WriteLine("Exception Message: {0}", e.Message)
End Try

Блок catch, предназначенный для перехвата определенных типов исключений, помещается перед общим исключением.

Среда CLR перехватывает исключения, не перехваченные блоком catch. В зависимости от настроек среды выполнения открывается окно отладки либо программа перестает выполняться и отображается диалоговое окно со сведениями об исключении. Сведения об отладке см. в статье Отладка и профилирование приложений (Возможно, на английском языке) (https://msdn.microsoft.com/ru-ru/library/7fe0dd2y(vs.71).aspx).

Дополнительные сведения о методах обработки исключений см. в статье Рекомендации по обработке исключений (Возможно, на английском языке) (https://msdn.microsoft.com/ru-ru/library/seyhszts(vs.71).aspx).

Пример

using System;
using System.Text;
using System.Web.Services.Protocols;
using ExcelWebService.myserver02;
namespace ExcelWebService
{
    class WebService
    {
        [STAThread]
        static void Main(string[] args)
        {
            // Instantiate the Web service and make a status array object
            ExcelService xlservice = new ExcelService();
            Status[] outStatus;
            RangeCoordinates rangeCoordinates = new RangeCoordinates();
            string sheetName = "Sheet1";

            // Set the path to the workbook to open.
            // TODO: Change the path to the workbook
            // to point to a workbook you have access to.
            // The workbook must be in a trusted location.
            // If workbookPath is a UNC path, the application 
            // must be on the same computer as the server.
            // string targetWorkbookPath = 
            // @"\\MyServer\myxlfiles\Formulas.xlsx";
            string targetWorkbookPath = 
            "http://myserver02/DocLib/Shared%20Documents/Basic1.xlsx";
            // Set credentials for requests
            xlservice.Credentials = 
               System.Net.CredentialCache.DefaultCredentials;

            try
            {
                // Call the OpenWorkbook method and point to the 
                // trusted location of the workbook to open.
                string sessionId = xlservice.OpenWorkbook(targetWorkbookPath, "en-US", "en-US", out outStatus);
                Console.WriteLine("sessionID : {0}", sessionId);
                // Prepare object to define range coordinates, 
                // and call the GetRange method.
                rangeCoordinates.Column = 0;
                rangeCoordinates.Row = 0;
                rangeCoordinates.Height = 18;
                rangeCoordinates.Width = 10;

                object[] rangeResult1 = xlservice.GetRange(sessionId, sheetName, rangeCoordinates, false, out outStatus);
                Console.WriteLine("Total rows in range: " + rangeResult1.Length);

                Console.WriteLine("Sum in last column is: " + ((object[])rangeResult1[2])[3]);

               // Close the workbook. This also closes the session.
                xlservice.CloseWorkbook(sessionId);
            }
            catch (SoapException e)
            {
                Console.WriteLine("SOAP Exception Error Code: {0}", 
                    e.SubCode.Code.Name);
                Console.WriteLine("SOAP Exception Message is: {0}", 
                    e.Message);
            }

            catch (Exception e)
            {
                Console.WriteLine("Exception Message: {0}", e.Message);
            }
            Console.ReadLine();
        }
    }
}
Imports System
Imports System.Text
Imports System.Web.Services.Protocols
Imports ExcelWebService.myserver02
Namespace ExcelWebService
    Friend Class WebService
        <STAThread> _
        Shared Sub Main(ByVal args() As String)
            ' Instantiate the Web service and make a status array object
            Dim xlservice As New ExcelService()
            Dim outStatus() As Status
            Dim rangeCoordinates As New RangeCoordinates()
            Dim sheetName As String = "Sheet1"

            ' Set the path to the workbook to open.
            ' TODO: Change the path to the workbook
            ' to point to a workbook you have access to.
            ' The workbook must be in a trusted location.
            ' If workbookPath is a UNC path, the application 
            ' must be on the same computer as the server.
            ' string targetWorkbookPath = 
            ' @"\\MyServer\myxlfiles\Formulas.xlsx";
            Dim targetWorkbookPath As String = "http://myserver02/DocLib/Shared%20Documents/Basic1.xlsx"
            ' Set credentials for requests
            xlservice.Credentials = System.Net.CredentialCache.DefaultCredentials

            Try
                ' Call the OpenWorkbook method and point to the 
                ' trusted location of the workbook to open.
                Dim sessionId As String = xlservice.OpenWorkbook(targetWorkbookPath, "en-US", "en-US", outStatus)
                Console.WriteLine("sessionID : {0}", sessionId)
                ' Prepare object to define range coordinates, 
                ' and call the GetRange method.
                rangeCoordinates.Column = 0
                rangeCoordinates.Row = 0
                rangeCoordinates.Height = 18
                rangeCoordinates.Width = 10

                Dim rangeResult1() As Object = xlservice.GetRange(sessionId, sheetName, rangeCoordinates, False, outStatus)
                Console.WriteLine("Total rows in range: " & rangeResult1.Length)

                Console.WriteLine("Sum in last column is: " & (CType(rangeResult1(2), Object()))(3))

               ' Close the workbook. This also closes the session.
                xlservice.CloseWorkbook(sessionId)
            Catch e As SoapException
                Console.WriteLine("SOAP Exception Error Code: {0}", e.SubCode.Code.Name)
                Console.WriteLine("SOAP Exception Message is: {0}", e.Message)

            Catch e As Exception
                Console.WriteLine("Exception Message: {0}", e.Message)
            End Try
            Console.ReadLine()
        End Sub
    End Class
End Namespace

См. также

Задачи

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

Инструкции по определению надежного расположения

Практическое руководство. Сохранение из клиента Excel на сервер

Использование свойства SubCode для получения кодов ошибок

Концепции

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

Excel Services Alerts

Известные проблемы и советы по работе со службами Excel

Вызовы SOAP с замыканием на себя и прямая привязка