2013-03-02 5 views
7

私はリモートのMSMQにメッセージを投稿するためにMsmqIntegrationBindingを使用したCLRベースのストアドプロシージャを持っています。 SQL Server 2005ではすべてがうまくいきましたが、2005年から2012年にアップグレードが行われると思われます。私はSQL Server 2012でCLR(SP)を登録しようとしましたが、System.ServiceModell.DLLを登録する際に、次のエラーが発生しました。SQL Server 2012のCLR関数(WCFベース)を登録

メッセージ6544、レベル16、状態1、行1
は、アセンブリのためのアセンブリを作成 'System.ServiceModel' アセンブリ 'microsoft.visualbasic.activities.compilerは' 純粋.NETアセンブリ不正な形式のかそうでないために失敗しました。 確認不能なPEヘッダー/ネイティブのスタブ。

私は解決策を探しましたが、他の人が同じ問題を抱えていることはほとんどなく、解決策がないようです。

MSMQIntegrationBindingを使用する主な理由は、各メッセージが1回だけ配信されるようにすることです。あなたが見る通り、通常のsystem.messagingクラスにはないExactlyOnceプロパティにかなり関心がありました。私たちは何千ものメッセージを処理し、メッセージの順序付けは非常に重要です。各メッセージにはidが打たれています。以前に送信されたメッセージよりも小さいIDを持つメッセージが送信された場合、クライアントシステムは停止します(大きな問題)。

また、system.messagingを使用してCLRストアドプロシージャを書き直しました。上記のシナリオをサポートできるかどうかの提案が必要です。

+0

代わりに、コールをキューにプロキシするWCFサービスを呼び出します。 – abatishchev

+0

SQL Serverとアセンブリのビット数はどのくらいですか? – abatishchev

答えて

2

私はあなたと同じ問題を抱えていますが、解決策があるかどうかはわかりません。私が見つけたのは:

.NETアセンブリには2種類あります。純粋な.NETアセンブリにはMSIL命令しか含まれていません。混合アセンブリには、アンマネージマシン命令とMSIL命令の両方が含まれています。混合アセンブリは、一般に、/ clrスイッチを使用してC++コンパイラでコンパイルされますが、ネイティブC++コードの結果である機械命令が含まれています。

SQL Serverのバージョンに関係なく、CREATE ASSEMBLYは純粋な.NETアセンブリだけを登録できます。 SQL Serverでは、CREATE ASSEMBLYを使用してSQL Serverデータベースにロードするアセンブリには、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を参照する必要があるということです。

私の推測では、近い将来には修正がありません。私たちがしなければならないことは、別の方法でコード化することです。

+1

他の方法は何ですか?あなたは解決策を見つけましたか? – sojim2

関連する問題