Что вызывает исключение TargetInvocationException при создании службы API AdWords? - PullRequest
0 голосов
/ 02 марта 2012

Я изучаю библиотеку .Net для подключения к API AdWords.Мой первый блок возникает, когда я пытаюсь создать сервис, используя мой AdWordsUser объект.Я получаю TargetInvocationException:

Exception has been thrown by the target of an invocation

Внутреннее исключение:

The value of the property 'type' cannot be parsed. The error is: Could not
load file or assembly 'Google.Ads.Common, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=52807268f2b614dc' or one of its dependencies. The located
assembly's manifest definition does not match the assembly reference. (Exception
from HRESULT: 0x80131040)

Основываясь на моем поиске Google, основное исправление предлагается добавить ссылку на SoapListenerExtension в вашем приложении.конфигурации.Я попробовал два метода (показанные в конце вопроса) без изменений.

Мое приложение содержит ссылки на библиотеки Google.Ads.Common, Google.AdWords и System.Web.Services.Вот мой код с расширенными ссылками для устранения неоднозначности.

var  headers    = new Dictionary<string, string>();
headers.Add("email", Properties.Settings.Default.AdWordsUserName);
// Rest of the creds
var  _user      = new Google.Api.Ads.AdWords.Lib.AdWordsUser(headers);
var  sig        = Google.Api.Ads.AdWords.Lib.AdWordsService.v201109.CampaignService;
var  rawService = _user.GetService(sig);  // The exception is thrown here
var  service    = (Google.Api.Ads.AdWords.v201109.CampaignService)rawService;

Если я пропущу пароль, изменений не будет, поэтому я не думаю, что это проблема с моими кредитами: код не получил этогоfar.

Библиотека Google.AdWords включает некоторые классы в пространстве имен Google.Api.Ads.Common.Lib, но не SoapListenerExtension.Может быть, это спрятано в какой-то другой библиотеке DLL в этой библиотеке?

Я просмотрел здесь дюжину вопросов по SO, которые касаются API AdWords, но ничего не касалось этой конкретной ошибки.


Редактировать

Используя AppDomain.CurrentDomain.GetAssemblies(), я опросил загруженные сборки.Если я добавлю эту безвредную строку:

var  cs = Google.Api.Ads.AdWords.Lib.AdWordsService.v201109.CampaignService;

Эта сборка загружена, по-видимому, успешно:

Loaded: Google.Ads.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

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


Приложение

Метод веб-службы 1:

  <system.web>
    <webServices>
      <soapExtensionTypes>
        <add type="Google.Api.Ads.Common.Lib.SoapListenerExtension, Google.Ads.Common" priority="1" group="0"/>
      </soapExtensionTypes>
    </webServices>
  </system.web>

Метод 2:

<system.web>
    <webServices>
        <soapExtensionTypes>
            <add type="Google.Api.Ads.Common.Lib.SoapListenerExtension, Google.Ads.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=52807268f2b614dc" priority="1" group="Low"/>
        </soapExtensionTypes>
    </webServices>
</system.web>

1 Ответ

0 голосов
/ 05 марта 2012

Обмен ссылками на подписанную версию сделал свое дело.Оглядываясь назад, я полагаю, что сообщения об ошибках указывали на это довольно четко.Мне интересно, для чего используются неподписанные версии или, иначе говоря, почему в этом случае работают только подписанные версии?

...