【发布时间】: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