System.IO.FileNotFoundException при выполнении хранимой процедуры CLR для запуска отчета Cognos - PullRequest
0 голосов
/ 11 августа 2011

Доброе утро. В настоящее время у меня возникает проблема с хранимой процедурой CLR, вызывающей сборку, созданную в Visual Basic (VS 2008). На самом высоком уровне сборка выполняет отчет, содержащийся в Cognos8, и перемещает выходные данные в определенный каталог в сети. У меня нет проблем при вызове метода из простого тестового EXE-файла, но когда я пытаюсь выполнить его с помощью хранимой процедуры CLR, я получаю следующее:

Сообщение 6522, уровень 16, состояние 1, процедура ReportRunner, строка 0

Ошибка .NET Framework при выполнении пользовательской подпрограммы или агрегата «ReportRunner»:

System.IO.FileNotFoundException: не удалось загрузить файл или сборку 'cognosdotnetassembly_2_0, версия = 10.1.4707.501, культура = нейтральная, PublicKeyToken = d6e6d7d808b7e5b7' или одна из ее зависимостей. Система не может найти указанный файл. System.IO.FileNotFoundException:

в System.Reflection.Assembly._nLoad (имя_файла_сборки, кодовая строка строки, сборка доказательствБезопасность, расположение сборкиHint, StackCrawlMark & ​​stackMark, логическое значение throwOnFileNotFound, логическое значение для интроспекции)

в System.Reflection.Assembly.nLoad (имя_файла AssemblyName, кодовая строка String, сборка доказательствSecurity, расположение сборкиHint, StackCrawlMark & ​​stackMark, логическое значение throwOnFileNotFound, логическое значение для интроспекции)

в System.Reflection.Assembly.InternalLoad (AssemblyName assemblyRef, Evolution AssemblySecurity, StackCrawlMark & ​​stackMark, Boolean forIntrospection)

в System.Reflection.Assembly.LoadWithPartialNameInternal (Строковое частичное имя, Свидетельство безопасности, Свидетельство, StackCrawlMark & ​​stackMark)

в System.Reflection.Assembly.LoadWithPartialName (String partalame, Evidence securityEvidence)

в System.Xml.Serialization.TempAssembly.LoadGeneratedAssembly (тип Type, String defaultNamespace, XmlSerializerImplementation & contract)

в System.Xml.Serialization.XmlSerializer.FromMappings (сопоставления XmlMapping [], тип Type) в System.Web.Services.Protocols.SoapClientType..ctor (Тип тип)

в System.Web.Services.Protocols.SoapHttpClientProtocol..ctor () at cognosdotnet_2_0.reportService1..ctor ()

в ReportRunnerv3.ReportRunner.ExecuteReport (Int32 inPLAN_ID, Int32 inContract_Sfx, строка inRptDate_DT, строка inPlanType, строка InInstmentOnlyInd, строка InGst, InG, String InG, InString, InInting, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC, InC. 1025 *

Примечания • cognosdotnetassembly_2_0 находится в том же каталоге, что и сборка «ReportRunner» • cognosdotnetassembly_2_0 был каталогизирован с использованием CREATE ASSEMBLY с разрешением set = unsafe • cognosdotnetassembly_2_0 также установлен в GAC

Ниже приводится сообщение, предоставленное fuslogvw.exe:

* Запись в журнале переплета сборки (8/11/2011 @ 5:57:39 AM) *

Операция не удалась.

Результат привязки: hr = 0x80070002. Система не может найти указанный файл.

Менеджер сборки загружен из: c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ mscorwks.dll

Запуск под исполняемым файлом c: \ Program Files \ Microsoft SQL Server \ MSSQL10_50.SQLEXPRESS \ MSSQL \ Binn \ sqlservr.exe

--- Подробный журнал ошибок следует.

=== Предварительная привязка информации о состоянии ===

Журнал: Пользователь = NT AUTHORITY \ NETWORK SERVICE

LOG: DisplayName = cognosdotnetassembly_2_0, версия = 10.1.4707.501, культура = нейтральная, PublicKeyToken = d6e6d7d808b7e5b7 (Полностью указано)

LOG: Appbase = file: /// c: / Program Files / Microsoft SQL Server / MSSQL10_50.SQLEXPRESS / MSSQL / Binn /

LOG: Initial PrivatePath = NULL

LOG: динамическая база = NULL

LOG: база кеша = NULL

LOG: AppName = NULL

Вызов сборки: System.Xml, версия = 2.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089.

===

LOG: это связывание начинается в контексте загрузки по умолчанию. LOG: файл конфигурации приложения не найден.

LOG: Использование файла конфигурации компьютера из c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ config \ machine.config.

LOG: ссылка после политики: cognosdotnetassembly_2_0, версия = 10.1.4707.501, культура = нейтральная, PublicKeyToken = d6e6d7d808b7e5b7

LOG: Fusion размещен. Проверьте хост об этой сборке.

LOG: Сборка отсутствует в списке загруженных CLR. Запрашиваемый узел сборки магазина.

LOG: попробуйте хранить сборку узла с сборкой cognosdotnetassembly_2_0, версия = 10.1.4707.501, культура = нейтральная, publickeytoken = d6e6d7d808b7e5b7, processorarchitecture = x86.

LOG: попробуйте хранить сборку узла с сборкой cognosdotnetassembly_2_0, версия = 10.1.4707.501, культура = нейтральная, publickeytoken = d6e6d7d808b7e5b7, processorarchitecture = msil.

LOG: попробуйте хранить сборку узла с сборкой cognosdotnetassembly_2_0, версия = 10.1.4707.501, культура = нейтральная, publickeytoken = d6e6d7d808b7e5b7.

WRN: хранилище сборки узла не содержит эту сборку.

ERR: во время проверки перед загрузкой произошла неисправимая ошибка (hr = 0x80070002).

Может ли кто-нибудь рассказать, почему SQL Server не может найти cognosdotnetassembly_2_0?

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Спасибо за вашу помощь.

- Крис

1 Ответ

0 голосов
/ 11 октября 2011

Я знаю, что об этом спросили некоторое время назад, но в надежде, что это поможет кому-то в будущем, я включаю то, что знаю.

Это, вероятно, связано с ограничениями безопасности, встроенными в систему SQL CLR. У меня были проблемы при попытке использовать XML-сериализацию внутри CLR SQL Sproc, потому что (и ваш журнал ошибок также показывает это) XML-сериализация фактически использует Reflection, которая требует больше разрешений безопасности, чем обычный управляемый код. Я предполагаю, что вы смогли сослаться на сборку Cognos, потому что она была добавлена ​​через файл Browsing. Если вы добавите сборку GAC, список будет очень ограниченным, я уверен, что он основан на определенном интерфейсе или атрибуте сборки, который не реализован или недоступен в используемой вами сборке Cognos.

Если ваш CLR SQL sproc работает с более высоким уровнем разрешений, он может работать. Скорее всего нет.

...