注册CLR函数(基于WCF)在SQL Server 2012中(Register CLR funct

2019-07-20 20:08发布

我有一个基于CLR存储过程,而使用MsmqIntegrationBinding将消息发布到远程MSMQ的。 一切都在SQL Server 2005工作正常,但现在是升级2005至12年假设发生。 我试图注册在SQL Server 2012中的CLR(SP),但在注册System.ServiceModell.DLL它想出了下面的错误。

消息6544,级别16,状态1,第1行
CREATE ASSEMBLY装配“System.ServiceModel”失败,因为程序集“microsoft.visualbasic.activities.compiler”是格式不正确或不是纯粹的.NET程序集。 不能证实的PE页眉/机桩。

我搜索了该决议,看来,很少有其他人有同样的问题,截至目前没有办法解决它。

使用的首要原因MSMQIntegrationBinding是我们想确保每个消息被传递一次。 正如你可以看到,我是在非常感兴趣ExactlyOnce财产是不是有正常system.messaging类。 我们处理消息的千和消息的顺序是非常重要的进一步每个消息都会加上一个id,如果发送的任何消息具有ID小于消息先前发送的客户端系统暂停(大问题)。

我也已经重写使用system.messaging的CLR存储过程。 我只是需要建议是否能支持我上面提到的场景。

Answer 1:

我有同样的问题,因为你,我不知道是否有它的解决方案。 我所发现的是:

有两种类型的.NET程序集。 纯.NET程序集只包含MSIL指令。 混合组件同时包含非托管的机器指令和MSIL指令。 在一般的混合组件由C ++编译器使用/ clr开关编译,但包含从本地C ++代码得到的机器指令。

无论哪个版本的SQL Server,CREATE ASSEMBLY只允许纯.NET程序集注册。 SQL Server一直要求的组件被加载到SQL Server数据库CREATE ASSEMBLY只包含MSIL指令(纯汇编)。 CREATE如果要被注册的组件是混合组件ASSEMBLY将提高上述错误。

从http://blogs.msdn.com/b/psssql/archive/2013/02/23/unable-to-register-net-framework-assembly-not-in-the-supported-list.aspx

问题的关键是,我们真的需要引用System.ServiceModel

所以,我的猜测是,在不久的将来,有没有为它修复。 我们需要做的是另一种方式的代码。



文章来源: Register CLR function (WCF based) in SQL Server 2012