Работая с CLR процедурами столкнулся со следующей проблемой:
при попытке сериализовать в объект ответ от Web-сервиса с помощью XmlSerializer я получал следующую ошибку на SQL-сервере:
Cannot load dynamically generated serialization assembly.
Как оказалось, для CLR процедуры, использующей Xml-сериализацию, необходимо создавать отдельную сборку сериализации и загружать эту сборку в SQL-сервер.
Чтобы создать сборку сериализации, нужно выполнить следующие шаги:
1. В VS выполнить Build проекта, в котором мы создаем
CLR процедуры.
2. С помощью приложения sgen.exe создать сборку сериализации. Для этого выполнить в командной строке следующий код:
[Путь до приложения sgen.exe]>sgen.exe /force [Путь до проекта с CLR процедурами] / SqlServerProject.dll
2. С помощью приложения sgen.exe создать сборку сериализации. Для этого выполнить в командной строке следующий код:
[Путь до приложения sgen.exe]>sgen.exe /force [Путь до проекта с CLR процедурами] / SqlServerProject.dll
В моем случае:
[Путь до приложения sgen.exe] == C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin;
SqlServerProject.dll - это имя сборки моего проекта с CLR процедурами.
В папке со сборкой проекта появится сборка сериализации. Добавить ее на сервер можно с помощью следующей команды, выполненной на SQL-сервере:
CREATE ASSEMBLY [SqlServerProject.XmlSerializers] from
'[Путь до проекта с CLR процедурами]SqlServerProject.XmlSerializers.dll'
WITH permission_set = EXTERNAL_ACCESS
Если SQL-сервер находится на другом компьютере(сервере), то сборку придется предварительно скопировать на диск этого сервера, и [Путь до проекта с CLR процедурами] в этом случае будет равен пути до папки на сервере, где будет находиться наша сборка.
Выполняем команду и Вуаля! Наша процедура заработала.
P.S. Есть еще один момент, о котором хочу упомянуть. Я работаю с Framework 4.0, а SQL-сервер поддерживает только Framework 3.5. Поэтому в свойствах моего проекта мне пришлось указать TargetFramework 3.5 Может кому-нибудь эта информация окажется полезной.
Этот комментарий был удален администратором блога.
ОтветитьУдалить