Far*_*anK 7 sql wcf sqlclr .net-assembly sql-server-2012
我有一个基于CLR的存储过程,用于MsmqIntegrationBinding将消息发布到远程MSMQ.在SQL Server 2005中一切正常,但现在有一个从2005年到2012年的升级,假设发生.我尝试在SQL Server 2012中注册CLR(SP),但在注册System.ServiceModell.DLL时出现了以下错误.
Msg 6544,Level 16,State 1,Line 1
为程序集'System.ServiceModel'创建程序集失败,因为程序集'microsoft.visualbasic.activities.compiler'格式错误或不是纯.NET程序集.无法验证的PE标头/本机存根.
我搜索了解决方案,似乎很少有其他人遇到同样的问题,而现在还没有解决方法.
使用的主要原因MSMQIntegrationBinding是我们希望确保每条消息只发送一次.正如你所看到的那样,我ExactlyOnce对普通system.messaging类中没有的属性非常感兴趣.我们处理数千条消息并且消息的排序非常重要,每条消息都标有一个id,如果发送的任何消息的id小于先前发送的消息,则客户端系统停止(大问题).
我还使用system.messaging重写了CLR存储过程.我只是需要建议是否可以支持我上面提到的场景.
我和你有同样的问题,不知道有没有解决办法。我发现的是:
.NET 程序集有两种类型。纯.NET 程序集仅包含MSIL 指令。混合程序集包含非托管机器指令和 MSIL 指令。混合程序集通常由 C++ 编译器使用 /clr 开关进行编译,但包含由本机 C++ 代码产生的机器指令。
无论哪个版本的 SQL Server,CREATE ASSEMBLY 都只允许注册纯 .NET 程序集。SQL Server 始终要求使用 CREATE ASSEMBLY 加载到 SQL Server 数据库中的程序集仅包含 MSIL 指令(纯程序集)。如果要注册的程序集是混合程序集,CREATE ASSEMBLY 将引发上述错误。
重点是我们确实需要参考System.ServiceModel。
所以,我的猜测是,在不久的将来,这个问题还没有解决办法。我们要做的就是用另一种方式编码。