2012-05-08 1 views
10

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

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-сервере 2012 года или в GAC, однако я не могу найти политики SMdiagnostics. Любые идеи, как их решить? Спасибо.

+0

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

ответ

12

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

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

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

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

+2

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

5

SQL 2012 перешел на версию рамочной версии 4.0.30319. Поэтому по умолчанию вы не сможете загружать сборки из старых фреймворков.

Для получения более подробной информации см. MSDN thread.

К сожалению, также нельзя загрузить сборку 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. 
+0

SQL 2012 может загружать .Net 2.0, .Net 3.0 и .Net 3.5 сборки просто отлично. –

+1

Конечно, но AFAIK по умолчанию запрещает загрузку старых сборок. По крайней мере, это относится к нашей установке. Тем не менее у меня все еще есть проблема с неправильной или не чистой сборкой. –

+3

@RemusRusanu Может ли кто-нибудь сказать мне КАК загрузить более раннюю версию? Я получаю: «Сборка« X »не может быть установлена, потому что существующая политика не позволит ей использовать ее». –

1

Проблема с не в CREATE ASSEMBLY для System.IdentityModel.dll для платформы .NET версии 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 СБОРЕ с .NET 4.5 сборка System.IdentityModel.dll в SQL Server 2012.

Натан Schoenack SQL Поддержка технического Lead

+0

Мой сервер говорит, что KB не может быть установлен (я испробовал все 3 варианта, на всякий случай). Как вам удалось импортировать сборки .Net 4.5? Мой SQL продолжает рассказывать мне: «... вы регистрируетесь, не полностью протестированы в среде размещения SQL Server ...». –

6

Натан Schoenack. Да, http://support.microsoft.com/kb/2742595 Исправить проблему с System.IdentityModel.dll , но с System.Data.Services.dll я все еще получаю сообщение об ошибке: CREATE ASSEMBLY для сборки «System.Data.Services» не удалось, поскольку сборка «microsoft.visualbasic.activities.compiler» является неверным или не является чистой сборкой .NET. Неиспытаемый заголовок PE/родной заглушка. Thanx.

Смежные вопросы