Compartilhar via


Como: usar a propriedade SubCode para captura códigos de erro

Serviços do Excel gera erros na exceção SOAP com base em erros que ocorrer em Serviços do Excel. Para tornar mais fácil para o desenvolvedor para capturar as condições de erro específica, uma alerta Serviços de cálculo do Excel esecsshort possui um associado código de erro. O Serviços Web do Excel, em seguida, retorna o erro usando as propriedades a partir de SoapException classe SoapException.

O seguinte apresentação exemplos como captura os códigos de erro usando o SubCode propriedade (https://msdn2.microsoft.com/en-us/library/System.Web.Services.Protocols.SoapException.subcode.aspx) do SoapException SoapException classe SubCode.

Dica

Para poder usar o SubCode SubCode propriedade, você deve usar Microsoft Visual Studio 2005.O SubCode SubCode propriedade não existe nas versões anteriores do Visual Studio.

Para obter uma lista dos códigos de erro, consulte Códigos de erro dos serviços Excel.

A captura códigos de erro ao usar SOAP

  1. Após adicionar um referência da Web ao Serviços Web do Excel, adicionar o seguinte usando diretiva para que você pode usar a classe SoapException SoapException sem precisar qualificá-lo com um espaço para nome completo:

    using System.Web.Services.Protocols;
    
  2. A captura os códigos de erro Serviços do Excel usando o SubCode SubCode propriedade, você deve usar o versão do protocolo SOAP12. Após criar uma instância de classe proxy Serviços Web do Excel eswsshort, defina o versão do protocolo SOAP da seguinte forma:

    // Instantiate the Web service. 
     ExcelService xlservice = new ExcelService();
    
    // Set the SOAP protocol version.           
    xlservice.SoapVersion = SoapProtocolVersion.Soap12;
    
  3. Para capturar os códigos de erro usando o SubCode SubCode propriedade, adicionar uma exceção SOAP bloco catch para seu codificar, de exemplo:

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

A captura códigos de erro ao usar direcionar a vinculação

  1. Na direcionar vinculação cenário, você não precisará adicionar um referência da Web para o Serviços Web do Excel. No entanto, você precisará adicionar uma referência ao espaço para nome System.Web.Services System.Web.Services do.

  2. Após adicionar uma referência, adicionar o seguinte using para seu codificar para que você pode usar a classe SoapException SoapException sem precisar qualificá-lo com um espaço para nome completo:

    using System.Web.Services.Protocols;
    
  3. Ao contrário usando SOAP sobre HTTP, na direcionar vinculação cenário, você não precisa definir a versão do protocolo SOAP.

  4. Para capturar os códigos de erro usando o SubCode SubCode propriedade, adicionar uma exceção SOAP bloco catch para seu codificar, de exemplo:

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

Exemplo

O seguinte programa (um aplicativo console) usa a propriedade SubCode SubCode para captura os códigos de erro. O programa executa ações diferentes com base em de código de erro que é detectada. Possível, de exemplo, intencionalmente transmitir EM UM não existe nome folha para disparador uma exceção SOAP. Neste maiúsculas e minúsculas, a seguinte mensagem exceção SOAP é retornada:

The sheet that was requested could not be found. Please try a different one.
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Services.Protocols;
using System.Threading;
using SubCodeExample;

namespace SubCodeExample
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length != 3)
            {
                Console.WriteLine("This program requires 3 parameters - 
                    workbook, sheet and cell");
            }
            string workbookUrl = args[0];
            string sheetName = args[1];
            string cellRange = args[2];

            const string DataRefreshError = 
                "ExternalDataRefreshFailed";
            const string InvalidSheetNameError = "InvalidSheetName";
            const string FileOpenNotFound = "FileOpenNotFound";

            string sessionId = null;
            MyXlServices.ExcelService service = null;
            try
            {
                MyXlServices.Status[] status;
                service = new 
                    SubCodeExample.MyXlServices.ExcelService();
                service.SoapVersion = SoapProtocolVersion.Soap12;
                service.Credentials = 
                    System.Net.CredentialCache.DefaultCredentials;
                sessionId = service.OpenWorkbook(workbookUrl, "", "", 
                    out status);

                object result = service.GetCellA1(sessionId, sheetName, 
                    cellRange, true, out status);
                Console.WriteLine("GetCell result was:{0}", result);

                int retries = 3;
                while (retries > 0)
                {
                    try
                    {
                        service.Refresh(sessionId, "");
                    }
                    catch (SoapException soapException)
                    {
                        bool rethrow = true;
                        if (soapException.SubCode.Code.Name == 
                            DataRefreshError)
                        {
                            if (retries > 1)
                            {
                                Console.WriteLine("Error when 
                                    refreshing. Retrying...");
                                Thread.Sleep(5000);
                                rethrow = false;
                            }
                        }
                        if (rethrow) throw;
                    }
                    retries--;
                }
                
            }
            catch (SoapException exception)
            {
                string subCode = exception.SubCode.Code.Name;
                if (subCode == FileOpenNotFound)
                {
                    Console.WriteLine("The workbook could not be found. 
                        Change the first argument to be 
                        a valid file name.");
                }
                else if (subCode == DataRefreshError)
                {
                    Console.WriteLine("Could not refresh 
                        the workbook.");
                }
                else if (subCode == InvalidSheetNameError)
                {
                    Console.WriteLine("The sheet that was requested 
                        could not be found. Please try 
                        a different one.");
                }
                else
                {
                    Console.WriteLine("Unknown error code returned from 
                        Excel Services:{0}", subCode);
                }
            }
            
            catch (Exception)
            {
                Console.WriteLine("Unknown exception was raised.");
            }
            finally
            {
                if (service != null && 
                    !String.IsNullOrEmpty(sessionId))
                {
                    try
                    {
                        service.CloseWorkbook(sessionId);
                    }
                    catch
                    {
                    }
                }
            }
        }
    }
}

Programação robusta

Certifique-se de que você adicionar um referência da Web para um site Serviços Web do Excel que você precisa acessar para. Alterar o using SubCodeExample; declaração para apontar para o site serviço da Web que você está fazendo referência.

Além disso, verifique altera para o caminho pasta de trabalho, nome folha e assim por diante, como apropriado.

Consulte também

Outros recursos

Acessando o SOAP API
Alertas de Serviços Excel
Configuração de Serviços Excel Questões e dicas
SOAP Loop-Back chama e direta vinculação
Walkthrough: desenvolvendo um aplicativo personalizado usando os serviços da Web Excel
Como a: ficar exceções
How to: Capture Status Return Values
Como a: um local relação de confiança
Como a: relação de confiança locais de pasta de trabalho com scripts
Como a: Salvar a partir de cliente Excel para o servidor