SQL Server 2008から呼び出される必要があるC/C++関数の膨大なライブラリがあります。 これらの関数をWin32 DLLからロードするC#アダプタクラスを作成しましたDllImport
とし、それらを.Netコードに公開します。これはほとんどの.Netアプリケーションで完璧に動作します。
今、SQL Server CLRで同じ手法を使用しようとしていました。私は、アダプタクラスを呼び出すCLR関数とストアドプロシージャのセットを作成します。これは、アンマネージDLLの結果をロードしようとすると、System.BadImageFormatException
になりません。
拡張ストアドプロシージャでこれを行うことはできますが、そのメソッドは廃止され、新しいSQL Serverリリースでは廃止される可能性があります。
CLRストアドプロシージャからアンマネージ関数を呼び出す正しい方法は何ですか?これはプロセス外で行うべきだと私は推測しています。SQL Server 2008からアンマネージC/C++ DLL関数を呼び出す
私は自分のストアドプロシージャをこれらの機能を公開するWebサービスとして呼び出そうとしています。これは良いアイデアのように思えますが、これまではWebサービスコールを行うSQLCLRアセンブリのデプロイメントに問題があります。私はSystem.ServiceModel.dll
アセンブリversion=3.0.0.0
をロードすることができません。System.Web.dll
アセンブリバージョン2.0.0.0
に依存しています。私はSystem.Web
アセンブリを展開する問題の解決策を発見した
Assembly 'System.Web' references assembly 'system.web, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.', which is not present in the current database. SQL Server attempted to locate and automatically load the referenced assembly from the same location where referring assembly came from, but that operation has failed (reason: version, culture or public key mismatch). Please load the referenced assembly into the current database and retry your request.
:
ロードSystem.Web
アセンブリは私に、次のエラーが発生します。 C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.dll
から展開する代わりに、C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Web.dll
から展開する必要があります。他のすべての必要なアセンブリも展開されます。展開のために
アセンブリのリストに:
- C:Windows通信基盤\ SMdiagnostics.dll \ \ WINDOWS \ Microsoft.NET \ Frameworkの\ v3.0の
- C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v2.0.50727 \ System.Web.dll
- C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Messaging.dll
- C:\ Program Files \ Referenceアセンブリ\ Microsoft \ Framework \ v3.0 \ System.IdentityModel.dll
- C:\プログラムファイル\リファレンスアセンブリ\マイクロソフト\ Frameworkの\ v3.0の\ System.IdentityModel.Selectors.dll
- C:\ WINDOWS \ Microsoft.NET Windows通信基盤\枠組み\ v3.0の\ Microsoft.Transactions \ .Bridge.dll
32ビットのアンマネージdllを64ビットサーバーにロードしようとしていますか? – GSerg
サイドリファレンスとして[これはプロセス外で行うことができます](http://stackoverflow.com/questions/752357/sql-server-2008-how-crash-safe-is-a-clr-stored-手続き - that-loads-unmanaged-l)、しかし私はそれが要件ではないと確信しています。 – GSerg
まあ、私は可能な限りそれを行う必要があります。はい、32ビットの管理されていない、私はサーバーが32ビットだと思うが、64ビットOSです。 私はその投稿を見ました。彼らは拡張ストアドプロシージャを使用していますが、これは廃止予定です。 – Ramzay