MSSQL 2012为WCF创建CLR触发器失败

Ale*_*exS 10 clr wcf triggers .net-assembly sql-server-2012

我创建了一个系统,它使用CLR触发器连接到WCF服务器并通知它有关DB的更改.它在SQL Server 2008 R2上运行正常.现在我尝试在SQL Server 2012上迁移.要使用WCF,我需要加载SMDiagnostics.dll程序集.我已经检查过clr在db中启用了,并设置了值得信任的"on",禁用了WCF debuging,我已经检查过SQL Server在本地系统帐户下运行,所以权限没有问题.现在我的问题是,当我运行以下命令

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
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

警告:Microsoft .NET Framework程序集'smdiagnostics,version = 3.0.0.0,culture = neutral,publickeytoken = b77a5c561934e089,processorarchitecture = msil.' 您正在注册未在SQL Server托管环境中进行全面测试,并且不受支持.将来,如果升级或维护此程序集或.NET Framework,则CLR集成例程可能会停止工作.有关更多详细信息,请参阅SQL Server联机丛书.Msg 6586,Level 16,State 1,Line 2 Assembly'SMdiagnostics'无法安装,因为现有的策略将使其无法使用.

SMdiagnostics.dll存在于指定的路径中.据我了解它在SQL Server 2012或GAC中的某种策略,但我找不到有关SMdiagnostics的政策.任何想法如何解决?谢谢.

小智 12

我们在一个月前就同样的问题向微软提交了一个问题.我的猜测是你无法加载System.IdentityModel.dll,它是System.ServiceModel程序集的依赖项.微软向我们表示,虽然这在SQL 2005和SQL 2008中有效,但它是SQL 2012中的一个已知错误,他们不会在SQL 2014之前修复它.

事实上,这还没有广为人知,但对我来说有点意外,除了2012年仍然很新.但这意味着你不能使用我在SQL CLR(WCF)中使用微软最佳实践的进程间通信技术,请注意.NET远程处理也会因为它也使用ServiceModel程序集.

我希望更多地澄清他们会说我们应该使用什么,我正在研究是否有办法编写基于WSE的SQL CLR,但对前景并不十分兴奋.

我对此非常不满,并希望其他人提高自己的声音会指出这是一个真正的问题,应该被认为是不可接受的.

  • 自2012年以来发生过什么事吗?我仍然得到错误,这是一个绊脚石 (2认同)

小智 6

内森·舍纳克.是的,http://support.microsoft.com/kb/2742595解决了System.IdentityModel.dll的问题,但是使用System.Data.Services.dll我仍然得到错误:程序集'System.Data.Services'的CREATE ASSEMBLY失败,因为程序集"microsoft.visualbasic.activities.compiler"格式不正确或不是纯.NET程序集.无法验证的PE标头/本机存根.感谢名单.


mat*_*zek 5

SQL 2012切换到框架版本4.0.30319.因此,默认情况下,您将无法从旧框架加载程序集.

有关详细信息,请参阅MSDN线程

不幸的是,还无法从框架版本4加载System.ServiceModel程序集,因为它依赖于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;
Run Code Online (Sandbox Code Playgroud)

我总是得到以下错误:

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.
Run Code Online (Sandbox Code Playgroud)

  • @RemusRusanu谁能告诉我如何加载早期版本?我得到了:"无法安装程序集'X',因为现有的策略会阻止它被使用." (3认同)