4

単純な HTTP Web サービスを呼び出す CLR プロジェクトがあります。x64 を対象としており、VS2010 が正しいターゲット アーキテクチャ (x64) を指すようにするために必要な変更について説明している次のリンクで説明されている手順を実行した後にのみ、適切にシリアル化することができました。正しいバージョンの sgen.exe を参照するためにいくつかの行を追加した csproj ファイル: http://geekswithblogs.net/akraus1/archive/2011/12/10/148002.aspx

これで、「シリアル化されたアセンブリの生成」をオンに設定することで、このプロジェクトとその .XmlSerializers.dll をビルドできるようになりました。CLR プロジェクトがデータベースにデプロイされるので、これを行いたいのですが、これらの DLL はデータベースで参照されておらず、CLR プロジェクトにアクセス許可を与えたくないため、オブジェクトを実行時にシリアル化したくありません。これは、セキュリティが重要な本番環境で使用されるため、また私のデータベースは信頼できないため、セキュリティ上の理由から EXTERNAL_ACCESS よりも高くなります。

簡単に言うと、シリアル化されたアセンブリをデータベースにアップロードするために次のリンクのガイドに従っていますが、エラーが発生します: http://footheory.com/blogs/bennie/archive/2006/12/07/invoking-a -web-service-from-a-sqlclr-stored-procedure.aspx

エラー: アセンブリ '.XmlSerializers' の CREATE ASSEMBLY が失敗しました。これは、アセンブリがサポートされていないバージョンの共通言語ランタイム用にビルドされているためです。

sgen.exe に CLR でサポートされているバージョンのアセンブリを強制的にシリアル化することで、これを修正する方法を知っている人はいますか? ビバ・ザ・スタック。

4

2 に答える 2

2

SQL Server 2005/2008 / 2008R2は、.Net2.0のみをサポートします。これを対象とするようにプロジェクトを変更する必要があります。「方法:特定の.NETFrameworkのバージョンまたはプロファイルを対象とする」を参照してください。ビルドターゲットにx64を指定する必要はありませ。SQLCLRアセンブリは、共通ターゲットビルドである必要があります。

そうは言っても、SQLCLRからWebサービスを呼び出すことは、本当に本当に悪い考えです。しないでください。外部プロセスにHTTP呼び出しを処理させます。

于 2012-06-26T13:16:31.657 に答える
2

問題は、実際には.NET 3.5をターゲットとして使用しているという事実ではないことがわかりましたが、間違ったバージョンのsgen.exeツールを参照していました。この場合、6.0Aのx64バージョンが必要でした。次のパスで.NET3.5に変換されます:C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ Bin \ x64\sgen.exe。これで、正しいバージョンのシリアル化アセンブリをビルドしてアップロードし、使用することができます。

于 2012-06-27T19:16:17.820 に答える