4

現在、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 で偽装を使用しようとしましたが、他にもいくつかあります。助言がありますか?私は何が欠けていますか?

4

1 に答える 1

2

私はこれを理解しているだけですが、これは私が得たものです:

SQL でアセンブリを作成するときに、permission_set を UNSAFE に設定する必要があります。

CREATE ASSEMBLY [<assemblyname>] FROM '<path>/<assemblyname>.dll'
WITH PERMISSION_SET = UNSAFE
GO

VS SQL データベース プロジェクトを使用して展開を行う場合、データベース プロジェクトの [プロパティ] の [データベース] タブで [アクセス許可] を [UNSAFE] に設定することによっても実行できます。

于 2009-06-19T18:08:31.057 に答える