Share via


Processamento de Erros e Exceções do Serviço

Este artigo descreve detalhes sobre o processamento de erros e a resolução de problemas da sua aplicação.

Sugestão

Quando criar uma mensagem de pedido SOAP, certifique-se de que os elementos estão na mesma ordem definida na linguagem de descrição (WSDL) dos serviços Web. Se os elementos necessários estiverem fora de ordem, a chamada falhará. Se os elementos opcionais estiverem fora de ordem, a chamada poderá falhar ou os elementos serão ignorados. Para obter mais detalhes, veja Ordem dos Elementos XML SOAP.

Erros comuns da API

Seguem-se algumas sugestões para lidar com erros de serviço comuns que poderá encontrar. Para obter uma lista abrangente dos códigos de erro da API de Anúncios do Bing, veja Códigos de Erro da Operação.

Código 105

Normalmente, indica a utilização de um token de acesso incorreto (elemento de cabeçalho AuthenticationToken) ou token de programador para o ambiente de destino. Por exemplo, as suas credenciais podem ser válidas na produção; no entanto, ao filtrar o sandbox, observaria o código 105.

Código 106

Normalmente, indica que, embora as credenciais estejam corretas para o ambiente de destino, o utilizador não tem acesso a uma das entidades especificadas no pedido. Por exemplo, observaria este erro ao chamar SubmitGenerateReportRequest se o utilizador não tiver permissões para a conta especificada.

Código 117

Se exceder o limite de chamadas de serviço, verá o seguinte erro:

  • Código de Erro Numérico: 117
  • Código de Erro Simbólico: CallRateExceeded
  • Mensagem: Excedeu o número de chamadas que pode efetuar num minuto. Reduza o número de chamadas efetuadas por minuto.

Quando observar este erro, pode submeter novamente o pedido abaixo do limite após aguardar 60 segundos.

Erro Interno

Ocasionalmente, o serviço pode devolver um erro interno da seguinte forma:

<OperationError>
  <Code>0</Code>
  <Details i:nil="true"/>
  <ErrorCode>InternalError</ErrorCode>
  <Message>An internal error has occurred.</Message>
</OperationError>

Eis alguns cenários de erro internos possíveis:

  • Este é um problema temporário do sistema e não há nada acionável que possa fazer. Se a mesma chamada já tiver funcionado para si, tente novamente mais tarde caso tenhamos resolvido o lado do servidor do problema.
  • A operação não foi devidamente mapeada para um código de erro acionável. Idealmente, se houver algo que os clientes possam fazer para resolver o problema, a API de Anúncios do Bing deve devolver um código de erro acionável. Se estiver a observar consistentemente o erro interno, contacte o suporte com os detalhes.

HTTP 500

Todas as operações de serviço da API de Anúncios do Bing cumprem a especificação SOAP (Simple Object Access Protocol) 1.1, através da qual são devolvidos erros com um código HTTP 500. Por exemplo, veja o seguinte.

HTTP/1.1 500 Internal Server Error

Isto não é, por si só, representativo de um código acionável e deve inspecionar os detalhes da falha para obter mais informações sobre o erro específico.

Não é possível criar uma classe abstrata

Não pode criar uma instância de uma classe base, como o Ad. Tem de instanciar uma das classes derivadas, por exemplo, ExpandedTextAd.

Por que motivo estou a receber um URL vazio da chamada à API de Relatórios?

Mesmo quando o Estado do relatório está definido como Êxito, o elemento ReportDownloadUrl pode ser nulo se não existirem dados disponíveis para os parâmetros de relatório submetidos. Se vir dados de desempenho na aplicação Web Microsoft Advertising para o mesmo intervalo de datas e critérios de filtro, contacte o suporte com detalhes.

Erros OAuth comuns

Seguem-se algumas sugestões para lidar com erros de autorização comuns que poderá encontrar.

Erros do AADSTS

Os códigos de erro e as mensagens do AADSTS estão sujeitos a alterações. Para obter as informações mais recentes, consulte a página para encontrar descrições https://login.microsoftonline.com/error de erros do AADSTS, correções e algumas soluções sugeridas.

Procure na parte numérica do código de erro devolvido. Por exemplo, se tiver recebido o código de erro "AADSTS650052", procure https://login.microsoftonline.com/error "650052". Também pode ligar diretamente a um erro específico ao adicionar o número do código de erro ao URL: https://login.microsoftonline.com/error?code=650052.

Alguns dos erros mais comuns do AADSTS, por exemplo, AADSTS50011, AADSTS650052 e AADSTS700016 são descritos mais detalhadamente abaixo.

AADSTS50011

O erro AADSTS50011 pode ser devolvido numa cadeia JSON ao pedir tokens de acesso com o ponto final plataforma de identidades da Microsoft da seguinte forma.

{"error":"invalid_client","error_description":"AADSTS50011: The reply url specified in the request
does not match the reply urls configured for the application: 'foo'.\r\nTrace ID:
x\r\nCorrelation ID: x\r\nTimestamp: 2019-05-10
17:18:23Z","error_codes":[50011],"timestamp":"2019-05-10
17:18:23Z","trace_id":"x","correlation_id":"x"}

Um erro de URI de redirecionamento inválido também pode ser devolvido como texto na janela do browser quando está a pedir o consentimento do utilizador da seguinte forma.

invalid_request: o valor fornecido para o parâmetro de entrada "redirect_uri" não é válido. O valor esperado é um URI que corresponde a um URI de redirecionamento registado para esta aplicação cliente.

Se observar este erro, o URI de redirecionamento não está corretamente registado ou a aplicação não está a utilizar o URI de redirecionamento registado.

AADSTS650052

O código de erro 650052 pode ser devolvido com a mensagem "A aplicação precisa de acesso a um serviço ("https://ads.microsoft.com") que a sua organização "{organization}" não subscreveu ou ativou."

Se observar este erro, certifique-se de que tem, pelo menos, um dos utilizadores administradores do inquilino do Azure AAD adicionado e ativado para contas profissionais na aplicação Web Microsoft Advertising. Contacte o suporte para obter mais assistência.

AADSTS700016

O código de erro 700016 pode ser devolvido com a mensagem "A aplicação com o identificador '{appIdentifier}' não foi encontrada no diretório '{tenantName}'".

Se tiver um ID de aplicação mais antigo (também conhecido como ID de Cliente) formatado como um valor hexadecimal, por exemplo, 0000000012345A67, tem de registar uma nova aplicação. Os IDs de aplicação válidos para utilização com o plataforma de identidades da Microsoft são formatados como um GUID com travessões, por exemplo, ab01c23d-4e56-7f8a-90bc-1d23efabc45d. Se não vir uma aplicação existente no portal do Azure - Registos de aplicações, essa é outra indicação de que deve substituí-la por uma nova aplicação.

URI de redirecionamento inválido

Um erro de URI de redirecionamento inválido pode ser devolvido numa cadeia JSON ao pedir tokens de acesso com o ponto final Live Connect da seguinte forma.

{"error":"invalid_grant","error_description":"The provided value for the 'redirect_uri' is not
valid. The value must exactly match the redirect URI used to obtain the authorization code."}

Um erro de URI de redirecionamento inválido também pode ser devolvido como texto na janela do browser quando está a pedir o consentimento do utilizador da seguinte forma.

invalid_request: o valor fornecido para o parâmetro de entrada "redirect_uri" não é válido. O valor esperado é um URI que corresponde a um URI de redirecionamento registado para esta aplicação cliente.

Se observar este erro, o URI de redirecionamento não está corretamente registado ou a aplicação não está a utilizar o URI de redirecionamento registado.

Concessão inválida

Poderá ser devolvido um erro de invalid_grant se tentar atualizar o token com um âmbito ao qual o utilizador não consente.

{
    "error":"invalid_grant",
    "error_description":"AADSTS70000: The request was denied because one or more scopes requested are unauthorized or expired. The user must first sign in and grant the client application access to the requested scope."
}

Também poderá ser devolvido um erro de invalid_grant se o URI de redirecionamento for inválido, o token de atualização tiver expirado, o utilizador tiver alterado a palavra-passe ou o token tiver sido revogado.

{"error":"invalid_grant","error_description":"The user could not be authenticated or the grant is expired. The user must first sign in and if needed grant the client application access to the requested scope."}

A qualquer momento, sem aviso prévio, a Microsoft pode determinar que o consentimento do utilizador deve ser novamente concedido; no entanto, alguns cenários estão ao seu controlo. Os clientes que executam aplicações em serviços que abrangem regiões e dispositivos, como o Microsoft Azure, devem registar uma aplicação Web com o segredo do cliente. Pode obter um token de atualização num dispositivo e atualizá-lo noutro, desde que tenha o mesmo ID de cliente e segredo do cliente. Se registar uma aplicação pública sem um segredo do cliente, não poderá utilizar um token de atualização entre dispositivos. Um token confidencial está vinculado ao segredo do cliente. Se tivesse utilizado um ID de aplicação cliente público sem segredo do cliente para obter um token de atualização nos EUA e, mais tarde, tentasse atualizar o token na região da UE, observaria o erro invalid_grant.

Aplicação não encontrada ou cliente não autorizado

Se observar um erro como "unauthorized_client: O cliente não existe" ou "A aplicação com o identificador "foo" não foi encontrada no diretório "barra", certifique-se de que a aplicação ainda existe para o ambiente de destino correto, ou seja, produção ou sandbox.

Pode ser devolvido um erro de aplicação não encontrada se estiver a chamar o ponto final plataforma de identidades da Microsoft com um ID de aplicação Live SDK com o formato hexadecimal curto, por exemplo, 0000000012345A67. Nesse caso, tem de registar uma nova aplicação. Os IDs de aplicação plataforma de identidades da Microsoft válidos são formatados como um GUID com travessões, por exemplo, ab01c23d-4e56-7f8a-90bc-1d23efabc45d. 

Se registou a aplicação no portal do Azure, na secção Tipos de conta suportados, certifique-se de que selecionou Contas em qualquer diretório organizacional e contas Microsoft pessoais. (Veja Registar uma aplicação) Se não tiver escolhido esta opção durante a configuração inicial, o portal do Azure poderá exigir que registe uma nova aplicação.

Aplicação não configurada como uma aplicação multi-inquilino

Poderá observar o seguinte erro se a aplicação registada estiver limitada a um inquilino específico.

Application 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx' is not configured as a multi-tenant application. Usage of the /common endpoint is not supported for such applications created after '10/15/2018'. Use a tenant-specific endpoint or configure the application to be multi-tenant.

Se registou a aplicação no portal do Azure, na secção Tipos de conta suportados, certifique-se de que selecionou Contas em qualquer diretório organizacional e contas Microsoft pessoais. (Veja Registar uma aplicação) Se não tiver escolhido esta opção durante a configuração inicial, o portal do Azure poderá exigir que registe uma nova aplicação.

Contactar o Suporte

O fórum Microsoft Q&A está disponível para a comunidade de programadores fazer e responder a perguntas sobre as APIs de Anúncios do Bing e os Scripts de Publicidade da Microsoft. A Microsoft monitoriza os fóruns e responde a perguntas que a comunidade ainda não respondeu.

Importante

Para garantir que vemos a sua pergunta, identifique-a com "advertising-api".

Se a investigação envolver uma conta confidencial ou detalhes pessoais ou se não encontrar as informações necessárias para resolver o problema através do Microsoft Q&A, contacte o Suporte publicitário da Microsoft.

Sugestão

Para agilizar a investigação, forneça suporte com detalhes como o ambiente de desenvolvimento, a frequência de erros e os passos para reproduzir o erro.

Para obter ajuda com chamadas para os serviços da API de Anúncios do Bing, veja esta lista de verificação e forneça os resultados à equipa de suporte.

  • Quem é o utilizador que está a tentar chamar o serviço, por exemplo, qual é o endereço de e-mail de início de sessão?
  • Qual é o ID da conta ou o número da conta a que o utilizador está a tentar aceder?
  • Quais são os passos necessários para reproduzir o erro? Inclua o pedido completo, a resposta e o carimbo de data/hora, exceto as credenciais privadas, por exemplo, o token de acesso.
  • Está a filtrar o ambiente de produção ou sandbox? Certifique-se de que está a utilizar os pontos finais de autorização e registo de aplicações corretos para produção vs. sandbox. Da mesma forma, certifique-se de que utiliza os endereços de serviço Web corretos para o mesmo ambiente.
  • Indique se o mesmo pedido funcionou para si no passado, ou seja, desempenho histórico.
  • Indique se pode reproduzir o problema sempre ou de forma intermitente.
  • Para problemas relacionados com o Serviço de Relatórios ou em Massa, inclua o rastreio para as operações do pedido e do inquérito de estado.
  • Para um problema de autenticação relacionado com o código de erro 105 ou 106, inclua também o identificador do sistema para as credenciais de início de sessão do utilizador do Microsoft Advertising. Para obter o identificador de utilizador do utilizador atual, consulte o Guia de Introdução .

Para obter ajuda para obter tokens de acesso e atualização para Autenticação com OAuth, veja esta lista de verificação e forneça os resultados à equipa de suporte.

  • Quem é o utilizador que está a tentar autenticar, por exemplo, qual é o endereço de e-mail de início de sessão?
  • Qual é o ID da conta ou o número da conta a que o utilizador está a tentar aceder?
  • Quais são os passos necessários para reproduzir o erro? Inclua o pedido completo, a resposta e o carimbo de data/hora, exceto as credenciais privadas, por exemplo, o token de acesso e o segredo do cliente.
  • Está a filtrar o ambiente de produção ou sandbox? Certifique-se de que está a utilizar os pontos finais de autorização e registo de aplicações corretos para produção vs. sandbox. Da mesma forma, certifique-se de que utiliza os endereços de serviço Web corretos para o mesmo ambiente.
  • Registou uma aplicação Nativa ou Web? Os clientes que executam aplicações em serviços que abrangem regiões e dispositivos, como o Microsoft Azure, devem registar uma aplicação Web com o segredo do cliente.
  • Qual é o seu ID de aplicação registado (client_id)? Se também tiver um segredo da aplicação (client_secret), confirme que está a defini-lo quando pedir tokens de acesso a partir do ponto final de autorização, mas não o partilhe com ninguém.
  • Execute uma verificação do estado de funcionamento do diagnóstico OAuth. Consegue obter um token de acesso com êxito e concluir o Guia de Introdução para produção ou sandbox? Caso contrário, onde é que a autenticação falha e qual é o erro?

Descrição Geral do Modelo de Falhas

Quando uma operação de serviço da API de Anúncios do Bing falha, devolverá uma falha de serviço, por exemplo, o Serviço de Gestão de Clientes pode devolver ApiFault. As exceções de falha incluem um ou mais objetos de erro. Os objetos de erro contêm os detalhes do motivo pelo qual a operação de serviço falhou e um código que identifica exclusivamente o erro. Para obter uma lista de códigos de erro, veja Códigos de Erro da Operação da API de Anúncios do Bing.

A falha disponível e os objetos de dados variam por serviço. Esta tabela descreve o modelo de falhas e liga a objetos de dados de erro para cada serviço.

Serviço Descrição
Informações do Ad Todas as operações de informações de anúncios podem gerar AdApiFaultDetail e ApiFaultDetail.
Em massa Todas as operações em massa podem gerar AdApiFaultDetail e ApiFaultDetail.
Gestão de Campanhas Todas as operações de gestão de campanhas podem gerar AdApiFaultDetail.

Algumas operações de gestão de campanhas também podem gerar ApiFaultDetail ou EditorialApiFaultDetail.

Para obter mais informações, veja Objetos de Dados de Gestão de Campanhas.
Faturação do Cliente Todas as operações de faturação do cliente podem gerar AdApiFaultDetail e ApiFault.

Algumas operações de faturação do cliente também podem gerar ApiBatchFault.
Gestão de Clientes Todas as operações de gestão de clientes podem gerar AdApiFaultDetail e ApiFault.
Relatórios Todas as operações de relatórios podem gerar AdApiFaultDetail e ApiFaultDetail.

Nota

Todos os objetos de falha são derivados do objeto ApplicationFault . O objeto ApplicationFault define o elemento TrackingId , que identifica exclusivamente a entrada de registo que contém os detalhes da chamada à API. Se precisar de contactar o suporte, indique o ID de controlo com a data e hora em que chamou a operação de serviço.

Êxito Parcial

O êxito parcial significa que ao adicionar, atualizar ou eliminar entidades em lotes de um ou mais, a operação pode ser bem-sucedida para alguns e falhar para parte do lote.

Êxito Parcial com o Serviço em Massa

Quando carrega registos num ficheiro em massa, o carregamento pode ser bem-sucedido para alguns registos e falhar para outros no lote. Quando chama GetBulkUploadUrl , pode optar por receber ou não erros no ficheiro de resultados de carregamento.

Nota

O Microsoft Advertising não suporta o comportamento de processamento de erros "tudo ou nada". Terá de lidar com isso do lado do cliente.

Êxito Parcial com o Serviço de Gestão de Campanhas

Para a maioria das entidades, o sucesso parcial é suportado ao chamar operações do serviço Gestão de Campanhas . Para cada índice de lista onde uma entidade não foi adicionada, o elemento correspondente será nulo. O elemento PartialErrors representa uma matriz de objetos BatchError que contêm detalhes para quaisquer entidades que não tenham sido adicionadas, atualizadas ou eliminadas com êxito. A lista inclui apenas um BatchError para tentativas sem êxito e não inclui elementos nulos no índice de cada entidade adicionada com êxito. Da mesma forma, algumas operações devolvem NestedPartialErrors como uma lista de BatchErrorCollection ou um BatchError bidimensional.

Nota

A operação ApplyProductPartitionActions inclui PartialErrors na resposta; no entanto, o êxito parcial não é suportado. Todo o conjunto de ações pedidas é bem-sucedido e a lista de resposta AdGroupCriterionIds está totalmente preenchida ou todas falham e a lista de resposta PartialErrors está totalmente preenchida.

Exceções .NET

Se utilizar o SDK .NET de Anúncios do Bing, a sua aplicação deve estar preparada para lidar com exceções de nível de serviço da API de Anúncios do Bing, exceções de WCF e exceções do SDK .NET de Anúncios do Bing descritas abaixo.

Para resolver problemas de aplicações .NET, veja Resolução de Problemas do SDK .NET.

Exceções de WCF

As falhas SOAP genéricas que não são específicas da API de Anúncios do Bing também podem ser geradas e devem ser detetas pela sua aplicação. Por exemplo, as aplicações .NET podem gerar exceções do Windows Communication Foundation (WCF), tais como Exception, TimeoutException e CommunicationException. Para obter informações sobre as exceções que deve esperar do WCF, veja Exceções Esperadas.

Não deve chamar o método Fechar no bloco finalmente para libertar o objeto de serviço. A objecção é que o método Close pode gerar exceções. Se Fechar gerar uma exceção, tem de chamar o método Abortar para garantir que todos os recursos são libertados; caso contrário, pode estar a perder recursos no servidor. A prática recomendada é chamar Fechar no bloco de tentativa e chamar Abortar das exceções detetados.

Pelo mesmo motivo, a utilização da instrução using não é recomendada. Para obter mais informações, veja Avoiding Problems with the Using Statement (Evitar Problemas com a Instrução Using).

Exceções do SDK .NET

As exceções do SDK .NET dos Anúncios do Bing abstraem algumas das exceções ao nível do serviço. Para contornar a maioria das exceções, pode tentar novamente e não hesite em contactar o suporte se o problema persistir após várias tentativas de repetição.

Exceção Espaços de nomes Descrição
CouldNotDownloadResultFileException Microsoft.BingAds Esta exceção é emitida pelo SDK HttpService interno após uma tentativa falhada de transferir um ficheiro de resultados em massa ou de relatório.
CouldNotUploadFileException Microsoft.BingAds Esta exceção é emitida pelo SDK HttpService interno após uma tentativa falhada de carregar um ficheiro em massa.
OAuthTokenRequestException Microsoft.BingAds Esta exceção é emitida se tiver sido devolvido um erro do servidor de autorização da Conta Microsft. Para resolver esta exceção, pode verificar primeiro o rastreio da pilha para ver os detalhes do erro, caso exista alguma ação que possa tomar para resolver o problema. Por exemplo, pode ter especificado um ID de cliente inválido.
BulkOperationCouldNotBeCompletedException Microsoft.BingAds.V13.Bulk Esta exceção é emitida se tiver sido feita uma tentativa de pesquisa de um ficheiro de resultados em massa concluído e o serviço em massa devolver um estado de falha.
BulkOperationInProgressException Microsoft.BingAds.V13.Bulk Esta exceção é emitida se tiver sido efetuada uma tentativa de transferir um ficheiro de resultados em massa que ainda não está disponível.
CouldNotGetBulkOperationStatusException Microsoft.BingAds.V13.Bulk Esta exceção é emitida se o BulkServiceManager não conseguir obter o estado da operação de carregamento ou transferência após várias tentativas.
CouldNotSubmitBulkDownloadException Microsoft.BingAds.V13.Bulk Esta exceção é emitida pelo BulkServiceManager quando a operação de serviço DownloadCampaignsByAccountIds que chamou não devolve uma resposta válida.
CouldNotSubmitBulkUploadException Microsoft.BingAds.V13.Bulk Esta exceção é emitida pelo BulkServiceManager quando a operação de serviço GetBulkUploadUrl que chamou não devolve uma resposta válida.
EntityReadException Microsoft.BingAds.V13.Bulk Esta exceção é gerada ao tentar ler entidades de um ficheiro em massa com o BulkFileReader. Para resolver esta exceção, pode verificar primeiro o rastreio da pilha para ver os detalhes do erro, caso exista alguma ação que possa tomar para resolver o problema. Por exemplo, o ficheiro em massa do qual está a tentar ler pode ter um valor inválido num dos campos.
EntityWriteException Microsoft.BingAds.V13.Bulk Esta exceção é emitida ao tentar escrever entidades num ficheiro em massa com o BulkFileWriter. Para resolver esta exceção, pode verificar primeiro o rastreio da pilha para ver os detalhes do erro, caso exista alguma ação que possa tomar para resolver o problema. Por exemplo, pode ter especificado um valor inválido para uma das entidades de carregamento.
CouldNotGetReportingDownloadStatusException Microsoft.BingAds.V13.Reporting Esta exceção é emitida se o ReportingServiceManager não conseguir obter o estado da operação de transferência após várias tentativas.
CouldNotSubmitReportingDownloadException Microsoft.BingAds.V13.Reporting Esta exceção é emitida pelo ReportingServiceManager quando a operação de serviço SubmitGenerateReport que chamou não devolve uma resposta válida.
ReportingOperationCouldNotBeCompletedException Microsoft.BingAds.V13.Reporting Esta exceção é emitida se tiver sido efetuada uma tentativa de consulta de um ficheiro de resultados de relatórios concluído e o serviço de relatórios devolver um estado de falha.
ReportingOperationInProgressException Microsoft.BingAds.V13.Reporting Esta exceção é emitida se tiver sido efetuada uma tentativa de transferir um ficheiro de resultados de relatórios que ainda não esteja disponível.

Resolução de Problemas do SDK .NET

A menos que exista um problema de serviço conhecido, normalmente quando uma chamada falha é porque os elementos SOAP são inválidos, não estão ordenados ou especificou as credenciais erradas. Para verificar ambos os casos, deve capturar o envelope SOAP do pedido. Pode contactar o suporte ou comparar a sua captura com o exemplo SOAP correspondente documentado para cada operação de serviço.

Rastreio do SDK

Pode utilizar o TraceBehavior do SDK .NET do Bing Ads para registar o pedido e a resposta SOAP.

Nota

O TraceBehavior está disponível com a versão 12.13.5 e posterior do SDK .NET do Bing Ads.

using (StreamWriter streamWriter = new StreamWriter(@"tracelog.txt"))
{
    streamWriter.AutoFlush = true;

    // For console output instead of file output, use new TextWriterTraceListener(Console.Out).
    // If you only need debug output, you can remove the StreamWriter, TraceListener, and AddTraceSource.
    TraceListener traceListener = new TextWriterTraceListener(streamWriter.BaseStream);

    IServiceCollection serviceCollection = new ServiceCollection();
    serviceCollection.AddLogging(builder => builder
        .AddTraceSource(new SourceSwitch("ProgramSourceSwitch", "verbose"), traceListener)
        .AddDebug()
        .AddFilter(level => level >= LogLevel.Debug)
    );
    var iLoggerFactory = serviceCollection.BuildServiceProvider().GetService<ILoggerFactory>();
    TraceBehavior.Instance.AddMessageInspector(
        new LogMessageInspector(
            iLoggerFactory.CreateLogger<Program>(),
            LogLevel.Information)
    );

    Authentication authentication = AuthenticateWithOAuth();

    // This utiltiy operation sets the global authorization data instance 
    // to the first account that the current authenticated user can access. 

    SetAuthorizationDataAsync(authentication).Wait();

    // Run all of the examples that are included above.

    foreach (var example in _examples)
    {
        example.RunAsync(_authorizationData).Wait();
    }

    streamWriter.Flush();
    traceListener.Flush();
}

O fragmento acima de Program.cs foi executado com a versão 13.0.5 do SDK .NET do Bing Ads com os seguintes pacotes NuGet. A sua implementação irá variar.

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Extensions.Configuration" version="2.2.0" targetFramework="net471" />
  <package id="Microsoft.Extensions.Configuration.Abstractions" version="2.2.0" targetFramework="net471" />
  <package id="Microsoft.Extensions.Configuration.Binder" version="2.2.0" targetFramework="net471" />
  <package id="Microsoft.Extensions.DependencyInjection" version="2.2.0" targetFramework="net471" />
  <package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="2.2.0" targetFramework="net471" />
  <package id="Microsoft.Extensions.Logging" version="2.2.0" targetFramework="net471" />
  <package id="Microsoft.Extensions.Logging.Abstractions" version="2.2.0" targetFramework="net471" />
  <package id="Microsoft.Extensions.Logging.Debug" version="2.2.0" targetFramework="net471" />
  <package id="Microsoft.Extensions.Logging.TraceSource" version="2.2.0" targetFramework="net471" />
  <package id="Microsoft.Extensions.Options" version="2.2.0" targetFramework="net471" />
  <package id="Microsoft.Extensions.Primitives" version="2.2.0" targetFramework="net471" />
  <package id="Newtonsoft.Json" version="12.0.2" targetFramework="net471" />
  <package id="System.Buffers" version="4.4.0" targetFramework="net471" />
  <package id="System.ComponentModel.Annotations" version="4.5.0" targetFramework="net471" />
  <package id="System.Configuration.ConfigurationManager" version="4.5.0" targetFramework="net471" />
  <package id="System.Memory" version="4.5.1" targetFramework="net471" />
  <package id="System.Numerics.Vectors" version="4.4.0" targetFramework="net471" />
  <package id="System.Runtime.CompilerServices.Unsafe" version="4.5.1" targetFramework="net471" />
  <package id="System.Security.AccessControl" version="4.5.0" targetFramework="net471" />
  <package id="System.Security.Permissions" version="4.5.0" targetFramework="net471" />
  <package id="System.Security.Principal.Windows" version="4.5.0" targetFramework="net471" />
  <package id="System.ServiceModel.Http" version="4.5.3" targetFramework="net471" />
  <package id="System.ServiceModel.Primitives" version="4.5.3" targetFramework="net471" />
</packages>

Opções do Fiddler

Pode seguir estes passos para capturar os envelopes SOAP de uma aplicação .NET com uma ferramenta de terceiros, como o Fiddler.

  • Depois de instalar o Fiddler, exporte o certificado do Fiddler a partir do arquivo de certificados de raiz.
  • Clique em Ferramentas>Opções do Fiddler.
  • Selecione o separador HTTPS e clique na caixa de verificação Desencriptar tráfego HTTPS .
  • Clique em OK e, em seguida, siga as instruções para exportar o certificado do Fiddler.

Exceções de Java

Se utilizar o SDK Java de Anúncios do Bing, a sua aplicação deve estar preparada para processar exceções de nível de serviço da API de Anúncios do Bing e exceções do SDK Java de Anúncios do Bing descritas abaixo.

Para resolver problemas de aplicações Java, veja Java SDK Troubleshooting (Resolução de Problemas do SDK Java).

Exceções do SDK Java

As exceções do SDK Java de Anúncios do Bing abstraem algumas das exceções ao nível do serviço. Para contornar a maioria das exceções, pode tentar novamente e não hesite em contactar o suporte se o problema persistir após várias tentativas de repetição.

Exceção Espaços de nomes Descrição
CouldNotDownloadResultFileException com.microsoft.bingads Esta exceção é emitida pelo SDK HttpService interno após uma tentativa falhada de transferir um ficheiro de resultados em massa ou de relatório.
CouldNotUploadFileException com.microsoft.bingads Esta exceção é emitida pelo SDK HttpService interno após uma tentativa falhada de carregar um ficheiro em massa.
OAuthTokenRequestException com.microsoft.bingads Esta exceção é emitida se tiver sido devolvido um erro do servidor de autorização da Conta Microsft. Para resolver esta exceção, pode verificar primeiro o rastreio da pilha para ver os detalhes do erro, caso exista alguma ação que possa tomar para resolver o problema. Por exemplo, pode ter especificado um ID de cliente inválido.
BulkDownloadCouldNotBeCompletedException com.microsoft.bingads.V13.bulk Esta exceção é emitida se tiver sido efetuada uma tentativa de pesquisa para um ficheiro de resultados de transferência em massa concluído e o serviço em massa devolver um estado de falha.
BulkOperationInProgressException com.microsoft.bingads.V13.bulk Esta exceção é emitida se tiver sido efetuada uma tentativa de transferir um ficheiro de resultados em massa que ainda não está disponível.
BulkUploadCouldNotBeCompletedException com.microsoft.bingads.V13.bulk Esta exceção é emitida se tiver sido efetuada uma tentativa de pesquisa para um ficheiro de resultados de carregamento em massa concluído e o serviço em massa devolver um estado de falha.
CouldNotGetBulkOperationStatusException com.microsoft.bingads.V13.bulk Esta exceção é emitida se o BulkServiceManager não conseguir obter o estado da operação de carregamento ou transferência após várias tentativas.
CouldNotSubmitBulkDownloadException com.microsoft.bingads.V13.bulk Esta exceção é emitida pelo BulkServiceManager quando a operação de serviço DownloadCampaignsByAccountIds que chamou não devolve uma resposta válida.
CouldNotSubmitBulkUploadException com.microsoft.bingads.V13.bulk Esta exceção é emitida pelo BulkServiceManager quando a operação de serviço GetBulkUploadUrl que chamou não devolve uma resposta válida.
EntityReadException com.microsoft.bingads.V13.bulk Esta exceção é gerada ao tentar ler entidades de um ficheiro em massa com o BulkFileReader. Para resolver esta exceção, pode verificar primeiro o rastreio da pilha para ver os detalhes do erro, caso exista alguma ação que possa tomar para resolver o problema. Por exemplo, o ficheiro em massa do qual está a tentar ler pode ter um valor inválido num dos campos.
EntityWriteException com.microsoft.bingads.V13.bulk Esta exceção é emitida ao tentar escrever entidades num ficheiro em massa com o BulkFileWriter. Para resolver esta exceção, pode verificar primeiro o rastreio da pilha para ver os detalhes do erro, caso exista alguma ação que possa tomar para resolver o problema. Por exemplo, pode ter especificado um valor inválido para uma das entidades de carregamento.
CouldNotGetReportingDownloadStatusException com.microsoft.bingads.V13.reporting Esta exceção é emitida se o ReportingServiceManager não conseguir obter o estado da operação de transferência após várias tentativas.
CouldNotSubmitReportingDownloadException com.microsoft.bingads.V13.reporting Esta exceção é emitida pelo ReportingServiceManager quando a operação de serviço SubmitGenerateReport que chamou não devolve uma resposta válida.
ReportingOperationCouldNotBeCompletedException com.microsoft.bingads.V13.reporting Esta exceção é emitida se tiver sido efetuada uma tentativa de consulta de um ficheiro de resultados de relatórios concluído e o serviço de relatórios devolver um estado de falha.
ReportingOperationInProgressException com.microsoft.bingads.V13.reporting Esta exceção é emitida se tiver sido efetuada uma tentativa de transferir um ficheiro de resultados de relatórios que ainda não esteja disponível.

Resolução de Problemas do SDK Java

A menos que exista um problema de serviço conhecido, normalmente quando uma chamada falha é porque os elementos SOAP são inválidos, não estão ordenados ou especificou as credenciais erradas. Para verificar em qualquer caso, deve capturar o envelope SOAP do pedido. Pode contactar o suporte ou comparar a sua captura com o exemplo SOAP correspondente documentado para cada operação de serviço.

Opções de JAX WS e Apache CXF

Pode utilizar o JAX WS e o Apache CXF para capturar os envelopes SOAP, por exemplo, se estiver a executar uma aplicação Maven.

  1. Edite pom.xml para incluir as seguintes dependências.

    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-rt</artifactId>
        <version>2.3.2</version>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-ri</artifactId>
        <version>2.3.2</version>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>rt</artifactId>
        <version>2.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>3.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-transports-http</artifactId>
        <version>3.3.2</version>
    </dependency>  
    
    
  2. Adicione as seguintes linhas à sua aplicação Java.

    System.setProperty("com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump", "true");
    System.setProperty("com.sun.xml.internal.ws.transport.http.HttpAdapter.dump", "true");
    

Opções do Fiddler

Pode seguir estes passos para capturar os envelopes SOAP de uma aplicação Java com uma ferramenta de terceiros, como o Fiddler.

  1. Depois de instalar o Fiddler, exporte o certificado do Fiddler a partir do arquivo de certificados de raiz. Clique em Ferramentas>Opções do Fiddler. Selecione o separador HTTPS e clique na caixa de verificação Desencriptar tráfego HTTPS . Clique em OK e, em seguida, siga as instruções para exportar o certificado do Fiddler.

  2. Utilize o seguinte comando para importar o certificado para o arquivo cacert utilizado pelo Java, por exemplo, execute a partir do PowerShell como Administrador.

    PS C:\Program Files\Java\jre1.8.0_201\bin> .\keytool.exe -importcert -v -alias "Fiddler cert" -trustcacerts -keystore "C:\Program Files\Java\jre1.8.0_201\lib\security\cacerts" -storepass changeit -file <PathToFiddlerRootGoesHere>\FiddlerRoot.cer
    
  3. Adicione as seguintes linhas à sua aplicação Java.

    System.setProperty("https.proxyHost", "127.0.0.1");
    System.setProperty("https.proxyPort", "8888");
    

Exceções PHP

Se utilizar o SDK PHP de Anúncios do Bing, a sua aplicação deve estar preparada para lidar com exceções de nível de serviço da API de Anúncios do Bing e exceções do SDK PHP de Anúncios do Bing descritas abaixo.

Para resolver problemas de aplicações PHP, veja Resolução de Problemas do SDK PHP.

Resolução de Problemas do SDK PHP

A menos que exista um problema de serviço conhecido, normalmente quando uma chamada falha é porque os elementos SOAP são inválidos, não estão ordenados ou especificou as credenciais erradas. Para verificar ambos os casos, deve capturar o envelope SOAP do pedido. Pode contactar o suporte ou comparar a sua captura com o exemplo SOAP correspondente documentado para cada operação de serviço.

Imprimir SOAP

No PHP, pode utilizar os seguintes métodos para imprimir os envelopes SOAP. Cada um dos exemplos de código PHP inclui estas instruções para imprimir os erros na consola.

print $proxy->GetService()->__getLastRequest()."\n";
print $proxy->GetService()->__getLastResponse()."\n";

Exceções do SDK PHP

As exceções do SDK PHP dos Anúncios do Bing abstraem algumas das exceções ao nível do serviço. Para contornar a maioria das exceções, pode tentar novamente e não hesite em contactar o suporte se o problema persistir após várias tentativas de repetição.

Também deve processar o OAuthTokenRequestException, que é emitido se for devolvido um erro do servidor de autorização da Conta Microsft. Para resolver esta exceção, pode verificar primeiro o rastreio da pilha para ver os detalhes do erro, caso exista alguma ação que possa tomar para resolver o problema. Por exemplo, pode ter especificado um ID de cliente inválido.

Exceções do Python

Se utilizar o SDK Python de Anúncios do Bing, a sua aplicação deve estar preparada para lidar com exceções de nível de serviço da API de Anúncios do Bing e exceções do SDK Python de Anúncios do Bing descritas abaixo.

Para resolver problemas de aplicações Python, veja Resolução de Problemas do SDK python.

Exceções do SDK python

As exceções do SDK Python dos Anúncios do Bing abstraem algumas das exceções ao nível do serviço. Para contornar a maioria das exceções, pode tentar novamente e não hesite em contactar o suporte se o problema persistir após várias tentativas de repetição.

Exceção Espaços de nomes Descrição
BulkException BingAds.V13.Bulk Esta exceção é emitida se tiver sido feita uma tentativa de pesquisa de um ficheiro de resultados em massa concluído e o serviço em massa devolver um estado de falha.
BulkDownloadException BingAds.V13.Bulk Esta exceção é emitida se o tempo limite ocorrer ao tentar transferir um ficheiro em massa.
BulkUploadException BingAds.V13.Bulk Esta exceção é emitida se ocorrer um tempo limite ao tentar transferir um ficheiro de resultados de carregamento em massa.
EntityReadException BingAds.V13.Bulk Esta exceção é gerada ao tentar ler entidades de um ficheiro em massa com o BulkFileReader. Para resolver esta exceção, pode verificar primeiro o rastreio da pilha para ver os detalhes do erro, caso exista alguma ação que possa tomar para resolver o problema. Por exemplo, o ficheiro em massa do qual está a tentar ler pode ter um valor inválido num dos campos.
EntityWriteException BingAds.V13.Bulk Esta exceção é emitida ao tentar escrever entidades num ficheiro em massa com o BulkFileWriter. Para resolver esta exceção, pode verificar primeiro o rastreio da pilha para ver os detalhes do erro, caso exista alguma ação que possa tomar para resolver o problema. Por exemplo, pode ter especificado um valor inválido para uma das entidades de carregamento.
FileDownloadException BingAds Esta exceção é emitida se ocorrer um tempo limite ao tentar transferir um ficheiro de resultados de carregamento em massa.
FileUploadException BingAds Esta exceção é emitida se ocorrer um tempo limite ao tentar carregar um ficheiro em massa.
OAuthTokenRequestException BingAds Esta exceção é emitida se tiver sido devolvido um erro do servidor de autorização da Conta Microsft. Para resolver esta exceção, pode verificar primeiro o rastreio da pilha para ver os detalhes do erro, caso exista alguma ação que possa tomar para resolver o problema. Por exemplo, pode ter especificado um ID de cliente inválido.
ReportingException BingAds.V13.Reporting Esta exceção é emitida se tiver sido efetuada uma tentativa de consulta de um ficheiro de resultados de relatórios concluído e o serviço de relatórios devolver um estado de falha.
ReportingDownloadException BingAds.V13.Reporting Esta exceção é emitida se ocorrer um tempo limite ao tentar transferir um ficheiro de resultados de relatórios.
SdkException BingAds A classe de exceção base para o SDK Python de Anúncios do Bing. Esta exceção nunca é gerada.
TimeoutException BingAds Esta exceção é emitida se ocorrer um tempo limite.

Resolução de Problemas do SDK python

A menos que exista um problema de serviço conhecido, normalmente quando uma chamada falha é porque os elementos SOAP são inválidos, não estão ordenados ou especificou as credenciais erradas. Para verificar ambos os casos, deve capturar o envelope SOAP do pedido. Pode contactar o suporte ou comparar a sua captura com o exemplo SOAP correspondente documentado para cada operação de serviço.

Registo

Se estiver a utilizar o SDK Python do Bing Ads, pode incluir o registo no tráfego de saída, por exemplo o pedido SOAP e a resposta. Cada um dos exemplos de código Python inclui estas instruções para imprimir a saída de todo o tráfego SOAP para a consola. Certifique-se de que os descompromissa se quiser ver o tráfego.

import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
logging.getLogger('suds.transport.http').setLevel(logging.DEBUG) 

See Also

Códigos de Erro da Operação da API de Anúncios do Bing
Endereços do Serviço Web da API de Anúncios do Bing