В этом случае я пытаюсь использовать Службы API Google (Plus Service), используя простое консольное приложение С#. Каждый раз, когда я вызываю функции API, я встречаю очень странное исключение:
Необработанное исключение типа "System.AccessViolationException" произошло в Unknown Module.
Дополнительная информация: Попытка чтения или записи защищенной памяти. Это часто свидетельствует о том, что другая память повреждена.
Это случается, когда я получаю конечные точки API, как этот пример:
Client.People.Get("me").Execute();
Раньше у кого-то была эта проблема?
РЕДАКТИРОВАТЬ:
Я загрузил образец GPlus и все еще получаю ту же проблему, но теперь внутри:
Oauth2Service.TokeninfoRequest request = service.Tokeninfo();
Я думаю, что общий случай здесь о сгенерированных классах кода:
EDIT 2:
Я прикрепляю стек:
в Google.Apis.Plus.v1.PeopleResource.GetRequest.set_UserId (значение строки) в Google.Apis.Plus.v1.PeopleResource.GetRequest..ctor (служба IClientService, строка userId) в c:\code.google.com\google-api-dotnet-client\default_gen\Tools\Google.Apis.NuGet.Publisher\Template\Build\Google.Apis.Plus.v1.cs: строка 2661 в Google.Apis.Plus.v1.PeopleResource.Get (строка userId) в c:\code.google.com\google-api-dotnet-client\default_gen\Tools\Google.Apis.NuGet.Publisher\Template\Build\Google.Apis.Plus.v1.cs: строка 2649 в Core.External.GoogleService.GooglePlusApplicationClient.Test() в e:\Copy\Feedly\Backend\Core.External.GooglePlus\GooglePlusApplicationClient.cs: строка 34 в FeedlyTest.Program.Main(String [] args) в e:\Projects\Feedly\Backend\Testing\Program.cs: строка 88
ИЗМЕНИТЬ 3:
Когда я использую комбинацию Ctrl + F5, она работает. Я прочитал, что комбинация отключает отладчик. Сначала подумал, может быть, в режиме отладчика система работает на 32 бит (а затем не может получить доступ к памяти, которая находится за пределами 32-битной границы). Я попытался изменить платформу отладки на 64-битную, но это не помогло.
Какой образец вы используете? Образец QuickStart Google+ является самым новым. Кроме того, вы можете найти это сообщение в блоге о потоках OAuth 2 в.NET.
Обратите внимание, что образец Google+ в настоящее время работает в Xamarin, а также в Visual Studio, поэтому вы можете попытаться определить, использует ли ваша среда свободную доступную среду IDE.
Убедитесь, что при использовании быстрого запуска, который вы собираетесь на http://server:port/signin.ashx
- в некоторых конфигурациях веб-приложение по умолчанию будет использовать другой маршрут.
Можете ли вы также разместить дополнительную информацию о коде, который вы используете? Например, следующий код показывает более полный пример вашего вызова tokeninfo сверху:
Oauth2Service service = new Oauth2Service(
new Google.Apis.Services.BaseClientService.Initializer());
Oauth2Service.TokeninfoRequest request = service.Tokeninfo();
request.AccessToken = token.AccessToken;
Tokeninfo info = request.Execute();
Я создал очень простую демонстрацию Google.NET Client API на GitHub, которую вы можете клонировать:
git clone https://github.com/gguuss/google-dotnet-demo
Когда вы открываете проект в Visual Studio, восстанавливаете пакеты NuGet, создаете проект и вводите токен доступа. Если все будет работать, демо покажет вам некоторые данные TokenInfo.
Я добавил еще одну демонстрацию, подтверждающую авторизацию. Когда я это сделал, я протестировал с помощью Visual Studio 2013, и мне пришлось добавить следующее как шаг после установки...
copy /Y "$(SolutionDir)packages\Microsoft.Bcl.Async.1.0.16\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll" "$(TargetDir)Microsoft.Threading.Tasks.Extensions.Desktop.dll"
В разделе "Свойства проекта" → "Создать" - "Платформа". Попробуйте перейти от "Любой процессор" к "x86" или вместо этого попробуйте включить "Предпочитаю 32-разрядный".