2011-08-11 41 views
0

早安。我目前遇到一个调用在Visual Basic(VS 2008)中创建的程序集的CLR存储过程的问题。在最高级别,程序集执行Cognos8中包含的报告并将输出移动到网络上的特定目录。我从简单的测试EXE调用该方法时没有问题,但是当我尝试通过CLR存储过程执行时,我得到以下内容:System.IO.FileNotFoundException当执行CLR存储过程运行Cognos报告

消息6522,级别16,状态1,过程ReportRunner,行0用户定义例程或聚合“ReportRunner”的执行过程中发生

一个.NET Framework错误:

System.IO.FileNotFoundException:未能加载文件或程序集“cognosdotnetassembly_2_0,版本= 10.1.4707.501文化=中立,PublicKeyToken = d6e6d7d808b7e5b7'或它的一个依赖项。该系统找不到指定的文件。 System.IO.FileNotFoundException:找不到

在System.Reflection.Assembly._nLoad(的AssemblyName文件名,字符串的代码库,证据assemblySecurity,装配locationHint,StackCrawlMark & stackMark,布尔throwOnFileNotFound,布尔forIntrospection)

在的System.Reflection .Assembly.nLoad(的AssemblyName文件名,字符串的代码库,证据assemblySecurity,装配locationHint,StackCrawlMark & stackMark,布尔throwOnFileNotFound,布尔forIntrospection)

在System.Reflection.Assembly.InternalLoad(的AssemblyName assemblyRef,证据assemblySe安全,StackCrawlMark & stackMark,布尔forIntrospection)

在System.Reflection.Assembly.LoadWithPartialNameInternal(字符串partialName,证据securityEvidence,StackCrawlMark & stackMark)

在System.Reflection.Assembly.LoadWithPartialName(字符串partialName,证据securityEvidence )

在System.Xml.Serialization.TempAssembly.LoadGeneratedAssembly(类型类型,字符串defaultNamespace,XmlSerializerImplementation &合同)

在System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping []映射,类型型) 在System.Web.Services.Protocols.SoapClientType..ctor(类型类型)

在System.Web.Services.Protocols .SoapHttpClientProtocol..ctor() 在cognosdotnet_2_0.reportService1..ctor()

在ReportRunnerv3.ReportRunner.ExecuteReport(的Int32 inPLAN_ID,的Int32 inContract_Sfx,字符串inRptDate_DT,字符串inPlanType,字符串inInvstmentOnlyInd,字符串inMOMInd,字符串inGPSIInd,字符串inPBTInd,字符串inPICAInd,字符串inClientAccomInd,字符串inInstSelectInd,字符串inRptType,的Int32 & outRC)

注 •cognosdotnetassembly_2_0位于相同的目录“ReportRunner”组件 •cognosdotnetassembly_2_0使用CREATE许可组组件编目=不安全 •cognosdotnetassembly_2_0也被安装在GAC

以下是所提供的信息由fuslogvw。EXE:

*大会粘结剂日志条目(2011年8月11日@上午05时57分39秒)*

操作失败。

绑定结果:hr = 0x80070002。该系统找不到指定的文件。

大会经理从装:C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727 \的Mscorwks.dll

下可执行的C运行:\ Program Files文件\ Microsoft SQL Server的\ MSSQL10_50.SQLEXPRESS \ MSSQL \ Binn \ sqlservr.exe

---详细的错误日志如下。

===预绑定状态信息===

LOG:用户= NT AUTHORITY \ NETWORK SERVICE

LOG:DisplayName的= cognosdotnetassembly_2_0,版本= 10.1.4707.501文化=中性公钥= d6e6d7d808b7e5b7 (完全指定)

LOG:应用平台=文件:/// C:/ Program Files文件/ Microsoft SQL Server的/ MSSQL10_50.SQLEXPRESS/MSSQL/BINN/

LOG:初始PrivatePath = NULL

LOG:动态基地= NULL

LOG:高速缓存基址= NULL

LOG:AppName的= NULL

调用组件:的System.Xml,版本= 2.0.0.0,文化=中性公钥= b77a5c561934e089。

===

LOG:此绑定在默认加载上下文中启动。 LOG:找不到应用程序配置文件。

LOG:使用c:\​​ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ config \ machine.config中的机器配置文件。

LOG:后政策参考:cognosdotnetassembly_2_0,版本= 10.1.4707.501,文化=中性公钥= d6e6d7d808b7e5b7

LOG:融合托管。检查有关此程序集的主机。

LOG:程序集不在CLR加载列表中。询问主机组装商店。

LOG:尝试使用程序集cognosdotnetassembly_2_0,version = 10.1.4707.501,culture = neutral,publickeytoken = d6e6d7d808b7e5b7,processorarchitecture = x86尝试主机程序集存储。

尝试使用程序集cognosdotnetassembly_2_0,版本= 10.1.4707.501,文化=中性,publickeytoken = d6e6d7d808b7e5b7,processorarchitecture = msil的主机程序集商店。

LOG:尝试使用程序集cognosdotnetassembly_2_0,版本= 10.1.4707.501,culture = neutral,publickeytoken = d6e6d7d808b7e5b7,尝试主机程序集存储。

警告:主机程序集存储不包含此程序集。

ERR:在预先下载检查期间发生了不可恢复的错误(hr = 0x80070002)。

有人可以提供有关为什么SQL Server无法找到cognosdotnetassembly_2_0的见解吗?

如果您需要更多信息,请让我知道。

感谢您的协助。

--Chris

回答

0

我知道这是前一段时间要求,但希望这将帮助别人,将来我包括我所知道的。

这可能与内置于SQL CLR系统中的安全限制有关。我试图在CLR SQL Sproc中使用XML序列化时遇到了问题,因为(并且您的错误日志也显示了这一点)XML序列化实际上使用了Reflection,它需要比普通托管代码更高的安全权限。我猜你可以参考Cognos程序集,因为它是通过Browsing为文件添加的。如果添加GAC'ed程序集,该列表非常有限我确定它基于特定的接口或程序集属性,该属性在您正在使用的Cognos Assembly中未实现或可用。

如果您的CLR SQL sproc以更高的权限级别运行,它可能会工作。很可能不会。