1

Я пытаюсь позвонить в Службы API Google (в частности, Google.Apis.Webfonts.v1.WebfontsService) из приложения консоли C#. И каждый раз, когда я получаю то же самое исключение:API Google Fonts для C# - System.AccessViolationException

An unhandled exception of type 'System.AccessViolationException' occurred in mscorlib.dll 

Additional information: Attempted to read or write protected memory. 
This is often an indication that other memory is corrupt. 

Моего полный код тестового приложения ниже и API для Google добавляются в виде пакетов NuGet. Я использую последнюю версию API пакетов NuGet и я нацеливание .Net 4.5 на окнах 8.1 и VS2013 SP4:

using Google.Apis.Services; 
using Google.Apis.Webfonts.v1; 
using Google.Apis.Webfonts.v1.Data; 
using System; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // create the service 
      var service = new WebfontsService(new BaseClientService.Initializer 
      { 
       ApplicationName = "Webfonts Sample", 
       ApiKey = "my private api key", 
      }); 

      // run the request 
      var result = service.Webfonts.List().Execute(); 

      // display the results 
      if (result.Items != null) 
      { 
       foreach (Webfont font in result.Items) 
       { 
        Console.WriteLine(font.Family); 
       } 
      } 
     } 
    } 
} 

Та же проблема существует для любого API вызова Google.Apis. Поэтому это заставило меня подумать, что это напрямую не связано с Webfonts, а с базовым сервисом. Я попытался решить его, запустив его в 32-битном режиме, но это мне не помогло. Затем вместо пакетов nuget я использовал исходную версию api и попытался ее отладить. Таким образом, я дошел до того, что исключение выбрано, но все еще не может понять, как оно было создано.

Неужели кто-нибудь сталкивался с этой проблемой раньше и смог ее восстановить. И как?

UPDATE: тот же код отлично работает в других коробках с одинаковой настройкой.

ответ

1

Я только что протестировал его, и он отлично работал для меня.

Вам нужны следующие пакеты NuGet.

Install-Package Google.Apis.Webfonts.v1
Install-Package Google.Apis.Auth

Usings

using Google.Apis.Webfonts.v1; 
using Google.Apis.Webfonts.v1.Data; 
using Google.Apis.Auth.OAuth2; 
using Google.Apis.Services; 

Auth

/// <summary> 
    /// Used for accessing public api data. 
    /// </summary> 
    /// <param name="apiKey">Public API key from Google Developers console</param> 
    /// <returns>a valid WebfontsService</returns> 
    public static WebfontsService AuthenticatePublic(string apiKey) 
    { 
     if (string.IsNullOrEmpty(apiKey)) 
      throw new Exception("apiKey is required."); 
     try 
     { 
      // Create the service. 
      var service = new WebfontsService(new BaseClientService.Initializer() 
      { 
       ApiKey = apiKey, 
       ApplicationName = "Webfonts Authentication Sample", 
      }); 
      return service; 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.InnerException); 
      throw ex; 
     } 
    } 

Запрос Метод

/// <summary> 
/// Retrieves the list of fonts currently served by the Google Fonts Developer API 
/// Documentation: https://developers.google.com/fonts/docs/developer_api/v1/webfonts/list 
/// </summary> 
/// <param name="service">Valid authentcated WebfontsService</param> 
/// <returns></returns> 
public static WebfontList list(WebfontsService service) 
{ 
    try 
    { 
     var request = service.Webfonts.List(); 
    return request.Execute(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Request Failed " + ex.Message); 
     throw ex; 
    } 


} 

Собираем все вместе

var service = StandardGoogleAuth.AuthenticatePublic("Your Public API key"); 

      var result = WebfontsSample.list(service); 

      if (result.Items != null) 
      { 
       foreach (var font in result.Items) 
       { 
        Console.WriteLine(font.Family); 
       } 
      } 
+0

Спасибо за время, но это в основном тот же самый пример я при условии, в моем вопросе. – Kalitsov

+0

Наверное, и он отлично работает. Возможно, проверьте свой ключ api. Нет проблем с клиентской библиотекой или api – DaImTo

+0

Я обновил свой вопрос. Мой код отлично работает в некоторых других блоках под одним и тем же IP-адресом. У меня нет ограничений на мой ключ api. Спасибо, в любом случае! – Kalitsov