10

CLR トリガーを使用して WCF サーバーに接続し、DB の変更について通知するシステムを作成しました。SQL Server 2008 R2 で問題なく動作します。現在、SQL Server 2012 に移行しようとしています。WCF を使用するには、他のアセンブリに沿って SMDiagnostics.dll アセンブリをロードする必要があります。db で clr が有効になっていることを確認し、trustworthy を「オン」に設定し、WCF デバッグを無効にし、SQL サーバーがローカル システム アカウントで実行されていることを確認したため、権限に問題はありません。今私の問題は、次のコマンドを実行すると

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

次のエラーが表示されます

警告: Microsoft .NET Framework アセンブリ 'smdiagnostics, version=3.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089, processorarchitecture=msil.' 登録しようとしているシステムは、SQL Server ホスト環境で完全にテストされておらず、サポートされていません。今後、このアセンブリまたは .NET Framework をアップグレードまたはサービスすると、CLR 統合ルーチンが機能しなくなる可能性があります。詳細については、SQL Server Books Online を参照してください。メッセージ 6586、レベル 16、状態 1、行 2 アセンブリ 'SMdiagnostics' は、既存のポリシーによって使用されないため、インストールできませんでした。

指定したパスに SMdiagnostics.dll が存在します。SQL Server 2012 または GAC で何らかのポリシーを理解しているため、SMdiagnostics に関するポリシーが見つかりません。それを解決する方法はありますか?ありがとう。

4

4 に答える 4

12

同じ問題について、1 か月前に Microsoft に問題を提出しました。私の推測では、System.ServiceModel アセンブリの依存関係である System.IdentityModel.dll を読み込めません。Microsoft は、これは SQL 2005 および SQL 2008 では機能していましたが、SQL 2012 では既知のバグであり、SQL 2014 までは修正されないことを示しています。

これがまだ広く知られていないという事実は、2012 年がまだ非常に新しいことを除けば、私にとっては少し驚きです。ただし、これは、Microsoft のベスト プラクティスであるプロセス間通信テクノロジを SQL CLR (WCF) 内で使用できないことを意味します。ServiceModel アセンブリも使用するため、.NET リモート処理も使用できないことに注意してください。

代わりに何を使用する必要があるかについて、彼らがより明確にすることを望んでいます.WSEベースのSQL CLRを作成する方法があるかどうかを調べていますが、その見通しについてはあまり興奮していません.

私はこれに非常に不満を感じており、他の人が声を上げて、これは現実の問題であり、容認できないと考えるべきだと指摘してくれることを願っています.

于 2012-10-29T22:49:11.763 に答える
6

ネイサン・シェーナック。はい。_アセンブリ 'microsoft.visualbasic.activities.compiler' の形式が正しくないか、純粋な .NET アセンブリではありません。検証不能な PE ヘッダー/ネイティブ スタブ。ありがとう。

于 2013-02-15T17:10:19.303 に答える
5

SQL 2012 はフレームワーク バージョン 4.0.30319 に切り替わりました。したがって、既定では、古いフレームワークからアセンブリを読み込むことはできません。

詳細については、 MSDN スレッドを参照してください。

残念ながら、フレームワーク バージョン 4 から System.ServiceModel アセンブリを読み込むこともできません。これは、純粋な .NET アセンブリではない Microsoft.VisualBasic.Activities.Compiler に依存しているためです。

脚本:

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.
于 2013-02-01T13:20:51.443 に答える
1

SQL Server2012で.NETFramework4.0バージョンのSystem.IdentityModel.dllのASSEMBLYを作成できない問題は、.NETチームによって最近リリースされたセキュリティ修正プログラムで解決されました。

MS13-004:Windows XP、Windows Server 2003、Windows Vista、Windows Server 2008、Windows 7、およびWindows Server2008R2での.NETFramework4のセキュリティ更新プログラムの説明:2013年1月8日 http://support.microsoft .com / kb / 2742595

私のテストでは、SQLServer2012のSystem.IdentityModel.dllの.NET4.5アセンブリを使用したCREATEASSEMBLYに問題がないことが示されています。

NathanSchoenackSQLサポートテクニカルリード

于 2013-02-13T21:41:38.300 に答える