Уважаемые коллеги-разработчики,
Я начну с самого начала, чтобы предоставить как можно больше контекста и информации.
Через пару дней go мы получили запрос от одного из наши клиенты. Они хотели изменить хранимую процедуру, которая использовалась веб-службой, которую мы обслуживаем для них.
Функция веб-службы сделает следующее:
- Примите 1 параметр, введите строка.
- Выполнить SP в настроенной базе данных, приняв указанный параметр.
- Сопоставить результат с автоматически сгенерированной моделью из EF. (Генерируется при обновлении модели)
- Сериализует результат в строку JSON.
- Добавьте эту строку JSON в Azure очередь
Хранимая процедура не делает ничего особенного. Некоторые объединяются и выбираются в определенных таблицах, но это так.
Изменение хранимой процедуры привело к обновлению модели (.edmx), поскольку были добавлены новые столбцы и удалены некоторые старые столбцы.
После добавления новой хранимой процедуры в мою локальную среду разработки и обновления модели я выполнил тестовый прогон. Сработало сразу. Я получил ожидаемый вывод из хранимой процедуры, и результат был успешно сериализован. После этого строка была успешно добавлена в очередь Azure.
По запросу клиента я опубликовала веб-сервис непосредственно на рабочем сервере.
Я провела быстрый тест на рабочем сервере путем перехода к URL-адресу и ручного вызова функции, передавая правильный параметр. Все хорошо, результат, как и ожидалось. Регистрация также показала, что все прошло хорошо, и мы получили ожидаемые результаты.
Теперь начинается странная часть;
Веб-сервис используется через внешнее приложение (Deltek Vision). Он вызывается нажатием кнопки, которая затем вызывает функцию веб-сервиса, передавая настроенный параметр. После нажатия кнопки мы приступаем к проверке очереди Azure, мы получили пустое сообщение. Что?
Я проверяю файлы журнала и вижу следующее:
Примечание. Я удалил всю конфиденциальную информацию.
20200310 13:52:34 Information Function called..
20200310 13:52:34 Information Project param: Parameter
20200310 13:52:34 Information Fired SP and got result!
20200310 13:52:34 Information Raw object: System.Data.Objects.ObjectResult`1[ComplexReturnType]
20200310 13:52:34 Information Database info [Name]: CatalogName
20200310 13:52:34 Information Database info [ConnectionString]: data source=ServerInstance;initial catalog=Catalog;persist security info=True;user id=user;password=password;MultipleActiveResultSets=True;App=EntityFramework
20200310 13:52:34 Information Database info [TimeOut]: 15
20200310 13:52:34 Information Database info [DataSource]: ServerInstance
20200310 13:52:34 Information Database info [ServerVersion]: 11.00.6537
20200310 13:52:34 Information Database info [State]: Open
20200310 13:52:34 Information Element type: <Correct Type here>
20200310 13:52:34 Information New list has Items: False
20200310 13:52:34 Information Serialized response: [] <--- This is where i expect result
20200310 13:52:34 Information Succesfully added message!
По сравнению с позвоните, что я сделал, непосредственно перейдя к URL, который был потреблен:
20200310 13:48:41 Information Function called..
20200310 13:48:41 Information Project param: Parameter
20200310 13:48:41 Information Fired SP and got result!
20200310 13:48:41 Information Raw object: System.Data.Objects.ObjectResult`1[CorrectComplexType]
20200310 13:48:41 Information Database info [Name]: CatalogName
20200310 13:48:41 Information Database info [ConnectionString]: data source=ServerInstance;initial catalog=catalog;persist security info=True;user id=user;password=password;MultipleActiveResultSets=True;App=EntityFramework
20200310 13:48:41 Information Database info [TimeOut]: 15
20200310 13:48:41 Information Database info [DataSource]: ServerInstance
20200310 13:48:41 Information Database info [ServerVersion]: 11.00.6537
20200310 13:48:41 Information Database info [State]: Open
20200310 13:48:41 Information Element type: <CorrectComplexType>
20200310 13:48:41 Information New list has Items: True
20200310 13:48:42 Information Serialized response: [Correct JSON string here] <--- Proper JSON string here
20200310 13:48:42 Information Succesfully added message!
Так что теперь я застрял с проблемой, которую я не могу решить; Хранимая процедура не выводит, когда функция вызывается через Deltek, но она будет выводить, когда функция вызывается локально.
То, что я пробовал / считал:
- Права и права => То же самое мы называем функцию через Deltek или браузер. Тот же> код выполняется, и те же учетные записи используются для доступа к источнику данных.
- Выполнение SP в SSMS => Работает как чудо.
- Sql Профилировщик сервера => Я сравнил оба сценарий успеха и неудачи. Они идентичны в профилировщике. (Кажется, я не могу найти фактический вывод, сгенерированный SP в Профилировщике сервера, хотя это возможно?)
- Запускать веб-сервис локально при подключении к производственной базе данных. Прикрепил отладчик и вызвал функцию; Результат, как и ожидалось, ничего странного, мы получили вывод.
Это работало в течение последних 6 месяцев. (До изменения)
Буду признателен за любые советы по дальнейшей диагностике.