Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 mssql2016 + CLR for API  [new]
Игорь_UUS
Member

Откуда: г. Екатеринбург
Сообщений: 670
Добрый день.

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

Сообщение 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-м удаляемом календари возникает данная ошибка, скрипт такой:

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 гугла не работает.

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

Если у кого есть какие идеи, подскажите что можно попробовать
13 сен 19, 13:46    [21970317]     Ответить | Цитировать Сообщить модератору
 Re: mssql2016 + CLR for API  [new]
1C Developer
Member

Откуда:
Сообщений: 65
ИМХО Вам нужно в подфорум C# и показать текст Вашей CORE_ApiGet или самостоятельно протестировать данную функцию в режиме отладки.
13 сен 19, 14:26    [21970378]     Ответить | Цитировать Сообщить модератору
 Re: mssql2016 + CLR for API  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
Игорь_UUS
Честно говоря ни знаю что посмотреть, что попробовать((
Нужно посмотреть, в какой строке вашего C# кода происходит ошибка.
Наверное, это несложно определить, раз ошибка повторяется.
13 сен 19, 18:53    [21970662]     Ответить | Цитировать Сообщить модератору
 Re: mssql2016 + CLR for API  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3796
Игорь_UUS
Если у кого есть какие идеи, подскажите что можно попробовать

C# переписать, отладить и покрыть тестами..
13 сен 19, 20:24    [21970725]     Ответить | Цитировать Сообщить модератору
 Re: mssql2016 + CLR for API  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3796
C# код..
13 сен 19, 20:24    [21970726]     Ответить | Цитировать Сообщить модератору
 Re: mssql2016 + CLR for API  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7757
Игорь_UUS,

в коде нет ветки, которая обрабатывает случай, при котором календарь не получен.
16 сен 19, 13:44    [21971570]     Ответить | Цитировать Сообщить модератору
 Re: mssql2016 + CLR for API  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
CORE_ApiGet такая прям секретная, что показать нельзя? исходник то есть?
16 сен 19, 14:21    [21971635]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить