Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / mssql2016 + CLR for API / 7 сообщений из 7, страница 1 из 1
13.09.2019, 13:46
    #39861500
Игорь_UUS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mssql2016 + CLR for API
Добрый день.

Написана библиотека CLR для работы с API. На её базе сделана интеграция с Google Calendar. В очень редких случаях в момент разработки и тестирования ловил следующую ошибку: "System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.", если целиком, выглядит примерно так:

Код: sql
1.
2.
3.
4.
5.
Сообщение 6522, уровень 16, состояние 1, строка 12
Произошла ошибка .NET Framework во время выполнения определяемой пользователем подпрограммы или агрегатной функции "CORE_ApiGet": 
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
System.NullReferenceException: 
   в UserDefinedFunctions.ApiGet(SqlString token, SqlString url)



После возникновения данной ошибки, API перестаёт работать, при вызове любого метода Google возникает "System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.". При этом, вызов другого API (не google) работает через ту же CLR. Помогает только перезапуск mssql, после чего API Google начинает работать.

Сегодня выявил как провоцируется стабильно.. в случае удаления календарей на стороне Google всегда на 3-м удаляемом календари возникает данная ошибка, скрипт такой:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
DECLARE @AccessToken	NVARCHAR(1024)

DECLARE @GoogleCalendars TABLE (
  [ID] NVARCHAR(128) PRIMARY KEY
)

-- Получаем токен.
EXECUTE [GOOGC_GenerateAccessToken] @AccessToken = @AccessToken OUTPUT
	  
	  
-- Получаем календари с платформы Google.
INSERT INTO @GoogleCalendars ([ID])
  SELECT [ID] FROM [dbo].[GOOGC_API_GetCalendarList](@AccessToken)
	  
-- Удаляем все имеющиеся календари в Google.
DECLARE @CalendarID	 NVARCHAR(128)
DECLARE @ExecAPI		BIT
WHILE EXISTS(SELECT TOP 1 [ID] FROM @GoogleCalendars)
BEGIN
  SET @CalendarID = (SELECT TOP 1 [ID] FROM @GoogleCalendars)

  -- Удаление календаря
  SET @ExecAPI = [dbo].[GOOGC_API_DeleteCalendar](@AccessToken, @CalendarID)

  -- удаление записи из цикла.
  DELETE FROM @GoogleCalendars WHERE [ID] = @CalendarID
END



Получается цикл, через функцию GOOGC_API_DeleteCalendar идёт вызов CLR, которая отправляет запрос в гугл на удаление календаря. Стабильно при удалении 3-го календаря по списку происходит слёт API, далее до момента перезапуска mssql API гугла не работает.

Честно говоря ни знаю что посмотреть, что попробовать((

Если у кого есть какие идеи, подскажите что можно попробовать
...
Рейтинг: 0 / 0
13.09.2019, 14:26
    #39861554
1C Developer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mssql2016 + CLR for API
ИМХО Вам нужно в подфорум C# и показать текст Вашей CORE_ApiGet или самостоятельно протестировать данную функцию в режиме отладки.
...
Рейтинг: 0 / 0
13.09.2019, 18:53
    #39861759
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mssql2016 + CLR for API
Игорь_UUSЧестно говоря ни знаю что посмотреть, что попробовать((Нужно посмотреть, в какой строке вашего C# кода происходит ошибка.
Наверное, это несложно определить, раз ошибка повторяется.
...
Рейтинг: 0 / 0
13.09.2019, 20:24
    #39861803
Дмитрий Мух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mssql2016 + CLR for API
Игорь_UUSЕсли у кого есть какие идеи, подскажите что можно попробовать
C# переписать, отладить и покрыть тестами..
...
Рейтинг: 0 / 0
13.09.2019, 20:24
    #39861804
Дмитрий Мух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mssql2016 + CLR for API
C# код..
...
Рейтинг: 0 / 0
16.09.2019, 13:44
    #39862271
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mssql2016 + CLR for API
Игорь_UUS,

в коде нет ветки, которая обрабатывает случай, при котором календарь не получен.
...
Рейтинг: 0 / 0
16.09.2019, 14:21
    #39862312
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mssql2016 + CLR for API
CORE_ApiGet такая прям секретная, что показать нельзя? исходник то есть?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / mssql2016 + CLR for API / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]