Вопрос по wcf – MSSQL 2012 создание триггеров CLR для WCF завершается неудачно

10

Я создал систему, которая использует триггеры CLR для соединения с сервером WCF и уведомления об изменениях в БД. Он работает нормально на SQL Server 2008 R2. Теперь я пытаюсь перейти на SQL Server 2012. Чтобы использовать WCF, мне нужно загрузить сборку SMDiagnostics.dll вместе с другими. Я проверил, что clr включен в db, и установил достоверность «on», отключил отладку WCF, проверил, что SQL-сервер работает под учетной записью локальной системы, поэтому проблем с разрешениями нет. Теперь моя проблема в том, что когда я запускаю следующую команду

IF  NOT EXISTS (SELECT * FROM sys.assemblies asms WHERE asms.name = N'SMdiagnostics')
create assembly [SMdiagnostics]
from  'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication        Foundation\SMdiagnostics.dll'
with permission_set = unsafe
go

я получаю следующую ошибку

Warning: The Microsoft .NET Framework assembly 'smdiagnostics, version=3.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089, processorarchitecture=msil.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details. Msg 6586, Level 16, State 1, Line 2 Assembly 'SMdiagnostics' could not be installed because existing policy would keep it from being used.

SMdiagnostics.dll существует по указанному пути. Как я понимаю, это своего рода политика в SQL Server 2012 или в GAC, однако я не могу найти никаких политик о SMdiagnostics. Есть идеи как это решить? Благодарю.

Люди на форумах MSDN отмечали, что я пытаюсь загрузить сборки из .net версии 3.0 в SQL Server 2012, который поддерживает Framework 4.0 или выше. Это решило некоторые проблемы, но я не могу загрузить некоторые сборки, которые мне нужны, чтобы использовать WCF из триггеров CLR.blogs.msdn.com/b/dohollan/archive/2012/04/20/… AlexS

Ваш Ответ

4   ответа
6

Да,http://support.microsoft.com/kb/2742595 исправить проблему с System.IdentityModel.dll но с System.Data.Services.dll я все еще получаю ошибку: СОЗДАЙТЕ СБОРКУ для сборки "System.Data.Services & apos; не удалось, потому что сборка "microsoft.visualbasic.activities.compiler" искажен или не является чистой сборкой .NET. Неподтверждаемый PE Заголовок / родная заглушка. Thanx.

1

рсии .NET Framework 4.0 в SQL Server 2012 была решена с помощью исправления безопасности, недавно выпущенного командой .NET.

MS13-004: Описание обновления безопасности для .NET Framework 4 в Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7 и Windows Server 2008 R2: 8 января 2013 г. http://support.microsoft.com/kb/2742595

Мое тестирование показало, что не возникает проблем с CREATE ASSEMBLY при сборке .NET 4.5 System.IdentityModel.dll в SQL Server 2012.

Натан Шоенак Технический лидер поддержки SQL

Мой сервер говорит, что KB не может быть установлен (на всякий случай я попробовал все 3 варианта). Как вам удалось импортировать сборки .Net 4.5? Мой SQL продолжает говорить мне ...you are registering is not fully tested in the SQL Server hosted environment ... & Quot ;.
5

ы не сможете загружать сборки из более старых платформ.

УвидетьПоток MSDN для деталей.

К сожалению, также нельзя загрузить сборку System.ServiceModel из версии 4 платформы, потому что это зависит от Microsoft.VisualBasic.Activities.Compiler, который не является чистой сборкой .NET.

Автор сценария:

CREATE ASSEMBLY [System.ServiceModel]
AUTHORIZATION [dbo]
FROM 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.ServiceModel.dll'
WITH PERMISSION_SET = UNSAFE;

Я всегда получаю следующую ошибку:

Msg 6544, Level 16, State 1, Line 1
CREATE ASSEMBLY for assembly 'Microsoft.VisualBasic.Activities.Compiler' failed because assembly 'Microsoft.VisualBasic.Activities.Compiler' is malformed or not a pure .NET assembly. 
Unverifiable PE Header/native stub.
SQL 2012 может нормально загружать сборки .Net 2.0, .Net 3.0 и .Net 3.5.
@RemusRusanu Может кто-нибудь сказать мне, как загрузить более раннюю версию? Я получаю: "Сборка" X "; не может быть установлен, поскольку существующая политика не позволит использовать его. & quot;
Конечно, но AFAIK политика по умолчанию запрещает загружать более старые сборки. По крайней мере, так обстоит дело с нашей установкой. Тем не менее, у меня все еще есть проблема с искаженной или не чистой сборкой.
12

ю, вы не можете загрузить System.IdentityModel.dll, которая является зависимостью сборки System.ServiceModel. Microsoft указала нам, что хотя это работало в SQL 2005 и SQL 2008, это известная ошибка в SQL 2012, и они не собираются ее исправлять до SQL 2014.

Тот факт, что это еще не стало широко известным, меня немного удивляет, за исключением того, что 2012 год все еще очень новый. Но это означает, что вы не можете использовать то, что я бы назвал лучшей технологией межпроцессного взаимодействия Microsoft в SQL CLR (WCF), отметьте, что удаленное взаимодействие .NET также будет недоступно, поскольку оно также использует сборку ServiceModel.

Я надеюсь на большее разъяснение того, что они сказали бы, что мы должны использовать вместо этого, я изучаю, есть ли способ написать основанный на WSE SQL CLR, но не очень взволнован перспективой.

Я весьма недоволен этим и надеюсь, что другие, повышающие свой голос, укажут, что это реальная проблема и ее следует считать неприемлемой.

Что-нибудь случилось с этим с 2012 года? Я все еще получаю сообщение об ошибке, и это является камнем преткновения.

Похожие вопросы