2011-08-11 42 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以更高的權限級別運行,它可能會工作。很可能不會。