0

からチュートリアルを完了しようとしてhttp://www.codeproject.com/Articles/21149/Invoking-a-WCF-Service-from-a-CLR-Triggerいますが、クライアントを展開しようとすると問題が発生します。出力に次のエラーが表示されます。

展開エラー SQL01268: .Net SqlClient データ プロバイダー: メッセージ 6503、レベル 16、状態 12、行 1 アセンブリ 'system.servicemodel、バージョン = 3.0.0.0、カルチャ = ニュートラル、publickeytoken = b77a5c561934e089。' が SQL カタログに見つかりませんでした。

c# 2010、.NET 4.0、および SQL Server Express 10 を使用しています。

.NET Framework 3.0 および 3.5 を使用するようにプロジェクトを変更しようとしましたが、それでも同じエラーが発生します。問題を解決する方法を知っている人はいますか?

編集

これは、次のアセンブリを SQL Server に追加しようとしたときに発生するエラーに関係している可能性があります。

CREATE ASSEMBLY SMDiagnostics 
FROM 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMDiagnostics.dll'
WITH permission_set = UNSAFE
GO

CREATE ASSEMBLY [System.Web] 
FROM 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.dll'
WITH permission_set = UNSAFE
GO

CREATE ASSEMBLY [System.Messaging] 
FROM 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Messaging.dll'
WITH permission_set = UNSAFE
GO

CREATE ASSEMBLY [System.IdentityModel] 
FROM 'C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.IdentityModel.dll'
WITH permission_set = UNSAFE
GO

CREATE ASSEMBLY [System.IdentityModel.Selectors] 
FROM 'C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\System.IdentityModel.Selectors.dll'
WITH permission_set = UNSAFE
GO

-- this will add service modal
CREATE ASSEMBLY [Microsoft.Transactions.Bridge] 
FROM 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication     Foundation\Microsoft.Transactions.Bridge.dll'
WITH permission_set = UNSAFE
GO
4

1 に答える 1

2

試行錯誤の 2 日間の後、私は最終的に次のように動作するようになりました。

( Windows Server 2008 x64、SQL Server 2008 64 ビット、フレームワーク 3.0 でビルドされたアセンブリ DLL、任意の CPU で)。SQL 2008 では .Net 3 を使い続けることをお勧めします。

alter database [TTBackup]
set trustworthy on;
go
USE TTBackup
--Register the assemblies referenced by our assembly.
CREATE ASSEMBLY SMdiagnostics AUTHORIZATION dbo FROM 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\SMdiagnostics.dll' WITH permission_set = unsafe
CREATE ASSEMBLY [System.Web] AUTHORIZATION dbo FROM 'C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Web.dll' WITH permission_set = unsafe
CREATE ASSEMBLY [System.Runtime.Serialization] AUTHORIZATION dbo FROM 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\System.Runtime.Serialization.dll' WITH permission_set = unsafe
CREATE ASSEMBLY [System.IdentityModel.Selectors] FROM 'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\System.IdentityModel.Selectors.dll' with permission_set = unsafe 
CREATE ASSEMBLY [System.Messaging] AUTHORIZATION dbo FROM 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Messaging.dll' WITH permission_set = unsafe
CREATE ASSEMBLY [Microsoft.Transactions.Bridge] FROM 'C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\Microsoft.Transactions.Bridge.dll' with permission_set = unsafe 

--register our assembly
CREATE ASSEMBLY [TTDatabaseIntegration] AUTHORIZATION dbo FROM 'D:\TTDatabaseIntegration.dll' WITH permission_set = unsafe
GO
--Register the UDF from CLR
CREATE FUNCTION [ListImportTemplates]( ) RETURNS TABLE(TemplateID int, TemplateName NVARCHAR(4000))
AS EXTERNAL NAME [TTDatabaseIntegration].[UserDefinedFunctions].[ListImportTemplates]
GO 

--Test my function 
select  * FROM dbo.[ListImportTemplates]()

参照される DLL のほとんどは 32 ビットですが、System.Web は 64 ビットであることに注意してください。(それが私にとって唯一の方法です)。

ノート:

  1. 最初に 64 ビット アセンブリを登録しましたが、ランタイム例外がスローされていました。System.IO.FileLoadException: Could not load file or assembly 'System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. Assembly in host store has a different signature than assembly in GAC. (Exception from HRESULT: 0x80131050) See Microsoft Knowledge Base article 949080 for more information.

    最終的に、GAC のファイルと SQL に登録したファイルを (サイズごとに) 比較しました。(GAC は C:\Windows\assembly にありますが、エクスプローラーでフォルダーを表示することはできません。これにはTotal Commanderを使用しています。) これが、GAC のバージョンが 32 ビット バージョンであることを発見した方法です。

  2. 次のクエリを使用して、登録済みのアセンブリを表示できます。SELECT * FROM sys.assemblies

参考文献(順を追って説明):

  1. http://nielsb.wordpress.com/sqlclrwcf/
  2. http://hyper-choi.blogspot.ro/2011/07/sql-2008-calling-wcf-service-from.html
于 2014-12-17T10:24:01.437 に答える