вторник, 25 ноября 2008 г.

Общие ошибки, приводящие к отказам SOAP (Часть II)

Добро пожаловать во вторую часть серии статей, в которых даются советы и подсказки, как решать возникающие с SOAP проблемы. AdWords API базируется на службе SOAP и обращается к ней. В тоже время, иногда очень трудно отлаживать отказы SOAP. В последней статье обсуждалось, что делать при возникновении ошибки SOAP «Неправильный идентификатор разработчика» («Invalid Developer Token»). Здесь будут обсуждаться действия при ошибочных заголовках запросов к SOAP.

Отсутствие заголовка

Новички в разработке с AdWords API могут получать сообщение об ошибке «Клиентский запрос не содержит [тип заголовка] заголовок» («The client request did not contain a [header type] header») – коды ошибок 1, 2, 8…
  • Если Вы получили эту ошибку, то наиболее очевидной причиной является то, что Вы не упомянули требуемого для SOAP заголовка в своем XML вызове. Каждый запрос к SOAP требует следующих заголовков: «email», «password», «developerToken», «applicationToken», «useragent». Кроме того, Вам может потребоваться заголовок «clientEmail» или «clientCustomerId» в зависимости от используемого метода API.
  • Другая возможная причина получения этой ошибки состоит в том, что Вы упомянули все необходимые заголовки, но использовали ошибочное пространство имен XML в своем XML. Например, если Вы отправляете заголовок запроса, описанный ниже, к https://adwords.google.com/api/adwords/v12/AccountService , то должны получить ошибку отсутствия заголовка email.
<soap:Header>
   <email xmlns="https://adwords.google.com/api/adwords/v11">ваш_e-mail</email>
   <!--more nodes-->
</soap:Header>
  • Наилучший способ решения этой проблемы состоит в том, чтобы включать в SOAP XML проверку Ваших запросов XML к SOAP для ошибочных значений заголовков. Хорошо сформированный запрос к SOAP выглядит примерно так:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Header>
     <applicationToken xmlns="https://adwords.google.com/api/adwords/v12">INSERT_APPLICATION_TOKEN_HERE</applicationToken>
     <developerToken xmlns="https://adwords.google.com/api/adwords/v12">INSERT_DEVELOPER_TOKEN_HERE</developerToken>
     <email xmlns="https://adwords.google.com/api/adwords/v12">INSERT_YOUR_EMAIL_HERE</email>
     <password xmlns="https://adwords.google.com/api/adwords/v12">INSERT_YOUR_PASSWORD_HERE</password>
     <useragent xmlns="https://adwords.google.com/api/adwords/v12">INSERT_YOUR_USERAGENT_HERE</useragent>
   </soap:Header>
   <soap:Body>
     <getAccountInfo xmlns="https://adwords.google.com/api/adwords/v12"/>
   </soap:Body>
</soap:Envelope>

Если Вы используете образцы исходного кода AdWords API, то заголовки содержатся в самом исходном коде. Если Вы используете клиентские библиотеки AdWords API, то, чаще всего, заголовки находятся в соответствующих конфигурационных файлах. Клиентская библиотека .NET использует app.config, клиентские библиотеки Java и Ruby используют файл adwords.properties, APIlity использует authentication.ini для хранения значений заголовков. Библиотека Python использует auth.pkl. Вы можете просмотреть эти файлы и увидеть в них необходимые заголовки. Наконец, все клиентские библиотеки имеют соответствующий конструктор, который может принять необходимые заголовки при инициализации библиотеки, так что Вам требуется при ошибке проверять также код инициализирующий библиотеку.

В следующий раз будут изучены ошибки, связанные с ошибочными операторами и методами API.


Автор: Anash Oommen

Комментариев нет: