【问题标题】:SQL CLR Stored Procedure and Web ServiceSQL CLR 存储过程和 Web 服务
【发布时间】:2009-04-15 12:34:37
【问题描述】:

我目前正在处理一项需要从 CLR 存储过程调用 Web 服务中的方法的任务。

一点背景:

基本上,我有一项需要大量工作的任务。如果严格在 SQL 中完成,处理大约需要 30-45 分钟。如果我将相同的过程放入代码中,我可以在几秒钟内完成它,因为能够更有效地优化处理。唯一的问题是我必须在 SQL Server 中将此流程设置为自动化任务。

在这种情况下,我已将流程公开为 Web 服务(我也将它用于其他事情)并希望 SQL CLR 存储过程使用该服务并执行代码。这让我可以完成我的自动化任务。

问题:

我已经阅读了很多关于如何在 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 行

执行用户定义的过程中发生 .NET Framework 错误 例程或聚合“MyStoredProc”:

System.Security.SecurityException:请求类型的权限 'System.Security.Permissions.EnvironmentPermission, mscorlib, 版本=2.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089' 失败了。

System.Security.SecurityException:

在 System.Security.CodeAccessSecurityEngine.Check(对象需求, StackCrawlMark& stackMark, Boolean 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(String FromPostCode, String ToPostCode)

我确信这是一个权限问题,但我不能,因为我有生之年让它工作。我曾尝试在 CLR 存储过程中使用模拟和其他一些东西。有什么建议么?我错过了什么?

【问题讨论】:

    标签: sql web-services permissions clrstoredprocedure


    【解决方案1】:

    我只是在想办法,但这就是我得到的:

    在SQL中创建程序集时需要将permission_set设置为UNSAFE。

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

    如果您使用 VS SQL 数据库项目进行部署,也可以通过在数据库项目的属性的数据库选项卡上将权限设置为不安全来完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 2017-08-22
      • 1970-01-01
      相关资源
      最近更新 更多