Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Matroz Member Откуда: Ekaterinburg Сообщений: 236 |
Задача - забирать данные, предоставляемые клиентом, обращаясь к его Web сервису. Задача уникальная в том смысле, что с остальных объектов мы читаем данные, подключая собственное оборудование. Данные посредством серверной программы опроса в конечном итоге попадают в БД MS SQL. Чтобы не плодить на сервере дополнительных программ, делаю через CLR. Добавил в проект ServiceReference, подключился, тут же был сгенерирован код для методов, в общем все быстро и хорошо. Сделал табличную функцию. Далее выполнены подготовительные пляски: sp_configure 'clr enabled', 1 reconfigure go alter database MyDB set trustworthy on; go При попытке добавить сборку в SQL create assembly WSClient AUTHORIZATION [dbo] from 'C:\WORK\WSClient\bin\Release\WSClient.dll' with permission_set=external_access go получаю следующее сообщение:
Насколько я понимаю, моя сборка требует system.runtime.serialization (добавляется в проект при добавлении ServiceReference), которая не нравится MS SQL. На просторах инета пишут о подобной проблеме, но решения не увидел. среда разработки: Visual Studio 2010 версия SQL: Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Feb 10 2012 19:39:15 Copyright (c) Microsoft Corporation Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) |
||
26 окт 17, 17:25 [20903476] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1696 |
Matroz, с permission_set = unsafe создает? |
26 окт 17, 18:02 [20903687] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1696 |
чет я сегодня торможу: сразу давайте SELECT @@VERSION SELECT * FROM sys.dm_clr_properties where name in ('directory', 'version') |
26 окт 17, 18:05 [20903698] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8320 |
Это плохая мотивация для создания UNSAFE сборок. |
||
26 окт 17, 18:10 [20903723] Ответить | Цитировать Сообщить модератору |
Matroz Member Откуда: Ekaterinburg Сообщений: 236 |
SELECT * FROM sys.dm_clr_properties where name in ('directory', 'version')
В проекте выбран тоже 4 фреймворк. С unsafe сборку не создает. |
|||||
26 окт 17, 18:27 [20903798] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1696 |
Matroz, ну вообщем это хреновая практика: но вам надо тогда зарегистрировать сборку сериализации с permission_set = unsafe create assembly [System.Runtime.Serialization] from 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Runtime.Serialization.dll' with permission_set = unsafe |
26 окт 17, 18:33 [20903821] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8320 |
Matroz, Ну external_access... Небезопасные или external_access сложнее сопровождать, чем трехслойку в любом случае. Особенно, если это не "на коленке" в проекте базы данных от VS. Можно включить trusworthy (забив на безопасность) или там если у вас три коннекта, работающих раз в час и пара CLR функций, тогда это терпимо. |
26 окт 17, 18:37 [20903831] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8320 |
При трехслойке вы можете изолировать слой приложений на отдельном сервере и резко повышаете ремонтопригодность. Если вы _внезапно_ перейдете на другой винсервер, то ваши сборки, которые, которые смотрят в GAC сборками sys.blahblah также идут на корм рыбам и вы имеете бэкап на руках, который как новенький, только им нельзя пользоваться. В общем, если Вам плевать, то делайте, иначе сразу конструируйте трехслойку. |
26 окт 17, 18:41 [20903842] Ответить | Цитировать Сообщить модератору |
cossack5 Member Откуда: Сообщений: 496 |
Поддерживаю предыдущих участников. Сам раньше много использовали CLR (функции, процедуры, типы данных и т.д.), сказать, что мучались, ничего не сказать. Не стоит оно того. СУБД не должна заниматься не своими делами (лезть в интернет, в файловую систему и т.д.). Если уж никак, то можете посмотреть SQL# (SQLSharp), которая предоставляет кучу возможностей (чтобы не писать самому). |
27 окт 17, 00:55 [20904693] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |