我在.Net中有一个Web应用程序,我在某些页面中使用Ajax控件。这些页面在localhost中工作,但托管时,包含Ajax的页面显示以下错误。
>'/ Allforkids'应用程序中的服务器错误。安全例外
描述:应用程序尝试执行安全策略不允许的操作。要授予此应用程序所需的权限,请与您的系统管理员联系或在配置文件中更改应用程序的信任级别。
异常详细信息:System.Security.SecurityException:请求类型为'System.Security.Permissions.FileIOPermission,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限失败。
来源错误:
在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。
堆栈追踪:
[SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0
System.Security.CodeAccessPermission.Demand() +58
System.Reflection.Assembly.VerifyCodeBaseDiscovery(String codeBase) +118
System.Reflection.Assembly.get_CodeBase() +35
System.Web.Handlers.ScriptResourceHandler.GetCodeBaseWithAssert(Assembly assembly) +31
System.Web.Handlers.ScriptResourceHandler.GetLastWriteTime(Assembly assembly) +36
System.Web.Handlers.ScriptResourceHandler.GetAssemblyInfoInternal(Assembly assembly) +61
System.Web.Handlers.ScriptResourceHandler.GetAssemblyInfo(Assembly assembly) +62
System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(Assembly assembly, String resourceName, CultureInfo culture, Boolean zip, Boolean notifyScriptLoaded) +325
System.Web.Handlers.ScriptResourceHandler.GetScriptResourceUrl(Assembly assembly, String resourceName, CultureInfo culture, Boolean zip, Boolean notifyScriptLoaded) +33
System.Web.UI.ScriptManager.GetScriptResourceUrl(String resourceName, Assembly assembly) +89
System.Web.UI.ScriptRegistrationManager.RegisterClientScriptResource(Control control, Type type, String resourceName) +111
System.Web.UI.ScriptManager.RegisterClientScriptResource(Control control, Type type, String resourceName) +9
版本信息:Microsoft .NET Framework版本:2.0.50727.3082; ASP.NET版本:2.0.50727.3082
任何人都可以提供适当的解决方案来摆脱这个错误吗?
答案 0 :(得分:1)
这看起来像您需要提出的托管服务提供商。从错误中可以看出托管服务器中的配置设置禁止访问本地文件。
您可以尝试将此添加到您的web.config:
<system.web>
...
<trust level="Medium" originUrl="" />
...
</system.web>
但是,如果托管服务提供商在machine.config中有一个取代它的设置,它将没有什么区别。这里有更多information。
答案 1 :(得分:1)
它可能是您的文件夹/文件的安全权限。您是否正在写入任何文件(如Access DB)?确保服务器上的ASP.Net机器帐户(例如PCName \ ASPNET)可以访问该文件夹。
答案 2 :(得分:0)
以下是Assembly类中的代码:
private void VerifyCodeBaseDiscovery(String codeBase)
{
if ((codeBase != null) &&
(String.Compare( codeBase, 0, s_localFilePrefix, 0, 5, true, CultureInfo.InvariantCulture) == 0)) {
System.Security.Util.URLString urlString = new System.Security.Util.URLString( codeBase );
new FileIOPermission( FileIOPermissionAccess.PathDiscovery, urlString.GetFileName() ).Demand();
}
}
在.Demand()方法上抛出异常,要求对包含该脚本的文件进行FileIOPermissionAccess.PathDiscovery。
我的猜测是IIS工作进程没有对包含脚本的路径的READ / BROWSE访问权限。
如果要将自己的脚本注册到ScriptManager,请检查文件路径(通常的经验法则,脚本不应该在父文件夹中(例如.. \ Scripts)。)
如果在AJAX Extensions脚本资源上出现此异常,则可能是安装AJAX Extensions时出现问题。您需要请求您的托管服务提供商进行检查。
PS。堆栈跟踪还有更多内容吗?看起来很奇怪,堆栈中的第一个调用是“RegisterClientScriptResource”。