2012-05-08 14 views
10

CLRトリガーを使用してWCFサーバーに接続し、DBの変更について通知するシステムを作成しました。 SQL Server 2008 R2で正常に実行されます。 これでSQL Server 2012で移行しようとしています。 WCFを使用するには、他に沿ってSMDiagnostics.dllアセンブリをロードする必要があります。 IVEはdbでclrが有効になっていることを確認し、信頼できる値を "on"に設定しました.WCFデバッグでは、SQLサーバーがローカルシステムアカウントで実行されるため、アクセス権に問題はありません。 今私の問題は、私は、コマンドWCFのCLRトリガーを作成するMSSQL 2012が失敗する

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 

次実行したときに、私は

Warning: The Microsoft .NET Framework assembly 'smdiagnostics, version=3.0.0.0, culture=neutral, publickeytoken=b77a5c561934e089, processorarchitecture=msil.' you are registering is not fully tested in the SQL Server hosted environment and is not supported. In the future, if you upgrade or service this assembly or the .NET Framework, your CLR integration routine may stop working. Please refer SQL Server Books Online for more details. Msg 6586, Level 16, State 1, Line 2 Assembly 'SMdiagnostics' could not be installed because existing policy would keep it from being used.

SMdiagnostics.dllは、指定されたパスに存在するエラー、次受けるということです。 私はSQLサーバ2012またはGACの何らかのポリシーを理解していますが、SMdiagnosticsについてのポリシーは見つけられません。 どのようにそれを解決するためのアイデア?おかげさまで

+0

MSDNフォーラムのメンバーは、.netバージョン3.0からアセンブリ4.0またはそれ以上をサポートするSQL Server 2012にアセンブリを読み込もうとしていると指摘しました。これはいくつかの問題を解決しましたが、CLRトリガーからWCFを使用する必要があるアセンブリをロードできません。 http://blogs.msdn.com/b/dohollan/archive/2012/04/20/sql-server-2012-sqlclr-net-framework-version.aspx – AlexS

答えて

12

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

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

WSEベースのSQL CLRを作成する方法があるかどうかを検討していますが、見込み客にはそれほど興奮していません。

私はこのことについて非常に不満であり、声を上げる他の人たちは、それが本当の問題であり、受け入れられないと考えられることを願っています。

+2

2012年以降、これに関連して何か起こったことはありますか?私はまだエラーが発生しており、それはかなりの障害です – Oszkar

5

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

詳細はMSDN threadを参照してください。

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

スクリプト:SQL Serverの2012年に.NETフレームワーク4.0バージョンのSystem.IdentityModel.dllためのアセンブリを作成するために失敗して

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. 
+0

SQL 2012は.Net 2.0、.Net 3.0と.Net 3.5アセンブリをロードできます。 –

+1

確かに、AFAIKは古いポリシーをロードすることを禁じています。少なくとも、これは私たちのインストールの場合です。それにもかかわらず、私は依然として不正なまたは純粋ではないアセンブリの問題を抱えています。 –

+3

@RemusRusanu誰かが以前のバージョンを読み込む方法を教えてもらえますか?私は次のようになっています: "既存のポリシーでは使用されないため、アセンブリ 'X'をインストールできませんでした。 –

1

問題:

CREATE ASSEMBLY [System.ServiceModel] 
AUTHORIZATION [dbo] 
FROM 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.ServiceModel.dll' 
WITH PERMISSION_SET = UNSAFE; 

私はいつも次のエラーを取得します最近.NETチームによってリリースされたセキュリティ修正プログラムで解決されました。

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

私のテストはしてアセンブリを作成には何の問題がないことを示していますSQL Server内のSystem.IdentityModel.dllの.NET 4.5アセンブリ2012

ネイサンSchoenack SQLサポート技術

+0

私のサーバーはKBをインストールできないと言っています(私は3つの味を試してみました)。 .NET 4.5アセンブリをどのようにインポートして管理しましたか?私のSQLは "... __あなたはSQL Serverのホスト環境で完全にテストされていません__ ..."と言っています。 –

6

ネイサンSchoenackをリードしています。 はい、http://support.microsoft.com/kb/2742595がSystem.IdentityModel.dllの問題を修正しました System.Data.Services.dllでエラーが発生しました:アセンブリ '純粋な.NETアセンブリでないか不正です。 確認不能なPEヘッダー/ネイティブのスタブ。 Thanx。

関連する問題