В настоящее время я работаю над задачей, в которой мне нужно вызвать метод в веб-службе из хранимой процедуры CLR.
Немного фона:
По сути, у меня есть задача, требующая ОЧЕНЬ хруста. Если все сделано строго в SQL, обработка занимает около 30-45 минут. Если я вставлю тот же процесс в код, я смогу завершить его за считанные секунды, благодаря возможности оптимизировать обработку намного более эффективно. Единственная проблема заключается в том, что мне нужно настроить этот процесс как автоматизированную задачу в SQL Server.
В этом ключе я представил процесс как веб-службу (я использую его и для других целей) и хочу, чтобы sproc SQL CLR использовал службу и выполнял код. Это позволяет мне иметь мою автоматизированную задачу.
Проблема:
Я прочитал довольно много разных тем о том, как использовать веб-сервис в CLR Sproc, и сделал это эффективно. Вот пример того, чему я следовал.
http://blog.hoegaerden.be/2008/11/11/calling-a-web-service-from-sql-server-2005/
Я могу заставить этот пример работать без проблем. Однако всякий раз, когда я связываю этот процесс с методом веб-службы, который включает в себя вызов базы данных, я получаю следующие исключения (в зависимости от того, перенесу я или нет в try / catch):
Сообщение 10312, уровень 16, состояние 49, процедура usp_CLRRunDirectSimulationAndWriteResults, строка 0
Выполнение .NET Framework было прервано. UDP / UDF / UDT не вернул токен потока.
или
Сообщение 6522, Уровень 16, Состояние 1, Процедура MyStoredProc, Строка 0
Ошибка .NET Framework во время выполнения определенного пользователем
подпрограмма или агрегат MyStoredProc:
System.Security.SecurityException: запрос на разрешение типа
'System.Security.Permissions.EnvironmentPermission, mscorlib,
Версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089 '
не удалось.
System.Security.SecurityException:
в System.Security.CodeAccessSecurityEngine.Check (Требование объекта,
StackCrawlMark & stackMark, Boolean isPermSet)
в System.Security.CodeAccessPermission.Demand ()
в System.Net.CredentialCache.get_DefaultCredentials ()
в
System.Web.Services.Protocols.WebClientProtocol.set_UseDefaultCredentials (Boolean
значение)
в
MyStoredProc.localhost.MPWebService.set_UseDefaultCredentials (Boolean
Value)
at MyStoredProclocalhost.MPWebService..ctor ()
в MyStoredProc.StoredProcedures.MyStoredProc (String FromPostCode,
String ToPostCode)
Я уверен, что это проблема с разрешением, но я не могу, потому что жизнь меня заставляет работать. Я попытался использовать олицетворение в sproc CLR и некоторых других вещах. Какие-либо предложения? Чего мне не хватает?