这个问题有点具体(MOSS2007),我不希望得到答案,但也许运气会对我微笑。
除了第一次将其添加到页面之外,我有一个可以正常工作的 Web 部件。当我尝试打开与 SQL 服务器的连接时,它会在构造函数中引发异常。SqlClientPermission 权限请求失败。当我说它有效时,我的意思是它在任何方面都已正确注册,并且在所有其他情况下都有效,包括后续调用。
有人说没有出路。我想知道为什么。是设计使然吗?
我什至完全信任我所能做的一切(更改了我在服务器上可以找到的每个.config 文件),但这并没有帮助。
似乎 SharePoint 在第一次添加 Web 部件时正在执行某种远程处理,该 Web 部件似乎在第一次构建时以最小的信任运行(与 ASP.Net 的 web_minimaltrust.config 中定义的相同)。尝试授予所有内容的权限并没有产生任何富有成效的结果。
我的解决方案是将数据访问代码移至 OnInit 方法,但这很烦人。有没有人有任何见解?
谢谢你。
来自调试器的一些额外信息。
唯一允许的权限是:
<PermissionSet class="System.Security.PermissionSet" version="1">
<IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="Execution"/>
<IPermission class="System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Level="Minimal"/>
</PermissionSet>
内部异常堆栈:
hresult = -2146233078 mscorlib 在 System.Security.CodeAccessSecurityEngine.Check(对象需求,StackCrawlMark& stackMark,布尔 isPermSet) 在 System.Security.PermissionSet.Demand() 在 System.Data.Common.DbConnectionOptions.DemandPermission() 在 System.Data.SqlClient.SqlConnection.PermissionDemand() 在 System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection) 在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory) 在 System.Data.SqlClient.SqlConnection.Open() 在 System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser 用户) 在 System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe() 在 System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode() 在 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式查询) 在 System.Data.Linq.DataQuery`1.System.Linq.IQueryProvider.Execute[S](表达式表达式) 在 System.Linq.Queryable.Count[TSource](IQueryable`1 源) 在 IManageDocumentsPart.ClientSideDocumentsWebPart.GetOfficeCode(Int32 employeeId) 在 IManageDocumentsPart.ClientSideDocumentsWebPart..ctor()
完整的堆栈:
IManageDocumentsPart.DLL!IManageDocumentsPart.ClientSideDocumentsWebPart.ClientSideDocumentsWebPart() 第 98 行 C# [本机到托管转换] [管理到本地转换] mscorlib.dll!System.RuntimeType.CreateInstanceSlow(bool publicOnly, bool fillCache = true) + 0x68 字节 mscorlib.dll!System.Activator.CreateInstance(System.Type type, bool nonPublic) + 0x43 bytes System.Web.dll!System.Web.HttpRuntime.FastCreatePublicInstance(System.Type 类型) + 0x56 字节 System.Web.dll!System.Web.UI.WebControls.WebParts.WebPartManagerInternals.CreateObjectFromType(System.Type 类型) + 0x7 字节 System.Web.dll!System.Web.UI.WebControls.WebParts.WebPartManager.ImportWebPart(System.Xml.XmlReader reader = {EndElement, Name="metaData"}, out string errorMessage = null) + 0x35d bytes Microsoft.SharePoint.dll!Microsoft.SharePoint.WebPartPages.SPWebPartManager.ImportWebPartBase(System.Xml.XmlReader reader = {EndElement, Name="metaData"}, string importErrorMessage = "Cannot import this Web Part.", out string errorMessage = null ) + 0x25 字节 Microsoft.SharePoint.dll!Microsoft.SharePoint.WebPartPages.WebPartImporter.CreateWebPart(bool clearConnections = true) + 0x1b4 字节 Microsoft.SharePoint.dll!Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(Microsoft.SharePoint.WebPartPages.SPWebPartManager manager = {Microsoft.SharePoint.WebPartPages.SPWebPartManager}, System.Xml.XmlReader reader = {None}, bool clearConnections = true , System.Uri webPartPageUri = {http://v-sp2007/testsite/default.aspx?PageView=Shared}, Microsoft.SharePoint.SPWeb spWeb = {Microsoft.SharePoint.SPWeb}) + 0x8e 字节 Microsoft.SharePoint.dll!Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(Microsoft.SharePoint.WebPartPages.SPWebPartManager manager = {Microsoft.SharePoint.WebPartPages.SPWebPartManager}, System.Xml.XmlReader reader = {None}, bool clearConnections = true , Microsoft.SharePoint.SPWeb spWeb = {Microsoft.SharePoint.SPWeb}) + 0xa1 字节 Microsoft.SharePoint.dll!Microsoft.SharePoint.WebPartPages.WebPartQuickAdd.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(string eventArgument = "http%253A%252F%252Fv%252Dsp2007%252F%255Fcatalogs%252Fwp%252FClientSideDocumentsWebPart%252Ewebpart;ClientSideDocumentsWebPart" ) + 0x288 字节 System.Web.dll!System.Web.UI.Page.RaisePostBackEvent(System.Web.UI.IPostBackEventHandler sourceControl, string eventArgument) + 0xc 字节 System.Web.dll!System.Web.UI.Page.RaisePostBackEvent(System.Collections.Specialized.NameValueCollection postData) + 0xb2 字节
...堆栈的其余部分与正常打开页面时相同。