現在、CLR ストアド プロシージャから Web サービスのメソッドを呼び出す必要があるタスクに取り組んでいます。
背景のビット:
基本的に、私は大量のクランチを必要とするタスクを持っています。厳密に SQL で実行すると、処理に約 30 ~ 45 分かかります。同じプロセスをコードに取り込めば、処理をより効率的に最適化できるため、数秒で完了することができます。唯一の問題は、このプロセスを SQL Server で自動タスクとして設定する必要があることです。
その意味で、プロセスを Web サービスとして公開し (他の目的にも使用します)、SQL CLR sproc がサービスを使用してコードを実行するようにします。これにより、タスクを自動化できます。
問題:
CLR Sproc で Web サービスを使用する方法に関するさまざまなトピックを読み、効果的に実行しました。これが私が従ったものの例です。
http://blog.hoegaerden.be/2008/11/11/calling-a-web-service-from-sql-server-2005/
この例を問題なく動作させることができます。ただし、このプロセスとデータベース呼び出しを含む Web サービス メソッドを組み合わせると、次の例外が発生します (try / catch でラップするかどうかによって異なります)。
メッセージ 10312、レベル 16、状態 49、プロシージャ usp_CLRRunDirectSimulationAndWriteResults、行 0 .NET Framework の実行が中止されました。UDP/UDF/UDT はスレッド トークンを元に戻しませんでした。
また
メッセージ 6522、レベル 16、状態 1、プロシージャ MyStoredProc 、行 0
ユーザー定義ルーチンまたは集計 'MyStoredProc' の実行中に .NET Framework エラーが発生しました:
System.Security.SecurityException: タイプ 'System.Security.Permissions.EnvironmentPermission、mscorlib、Version=2.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089' のアクセス許可の要求が失敗しました。
System.Security.SecurityException:
System.Security.CodeAccessSecurityEngine.Check (オブジェクトの要求、StackCrawlMark & stackMark、ブール値 isPermSet) で
System.Security.CodeAccessPermission.Demand() で
System.Net.CredentialCache.get_DefaultCredentials() で
System.Web.Services.Protocols.WebClientProtocol.set_UseDefaultCredentials (ブール値) で
MyStoredProc.localhost.MPWebService.set_UseDefaultCredentials (ブール値) で
MyStoredProclocalhost.MPWebService..ctor() で
MyStoredProc.StoredProcedures.MyStoredProc (文字列 FromPostCode、文字列 ToPostCode) で
これは許可の問題だと確信していますが、私の人生ではそれを機能させることはできません。CLR sproc で偽装を使用しようとしましたが、他にもいくつかあります。助言がありますか?私は何が欠けていますか?