0
我正在尝试编写一个页面来托管,代码一直在抛出异常。我相信问题是服务器上的权限不会让XmlUrlResolver的子类得到实例化,但我想用这个请求一些帮助...GoDaddy不会让XmlUrlResolver运行
此代码在我的本地开发框中工作,并且如果我使用File.ReadAllText(HostingEnvironment.MapPath( “〜/ XML/home.xml”)),它的工作,所以我相当肯定它不是IO权限....
例外:
Security Exception
Description: The application attempted to perform an operation not allowed by the security policy. To grant this application the required permission please contact your system administrator or change the application's trust level in the configuration file.
Exception Details: System.Security.SecurityException: Request failed.
Source Error:
Line 33: t.Load(reader, null, new XsltUrlResolver());
Line 34: sb = new StringBuilder(File.ReadAllText(HostingEnvironment.MapPath("~/xslt/url-encode.xslt")));
Line 35: }
Line 36: </script>
Line 37:
代码(这是我用来试图缩小问题范围的一个简单页面):
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" Inherits="System.Web.UI.Page" %>
<%@ Import Namespace="Web" %>
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Web.Hosting" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Xml.Xsl" %>
<%@ Import Namespace="System.Text" %>
<%@ Import Namespace="System.Web" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
public StringBuilder sb = new StringBuilder();
public class XsltUrlResolver : XmlUrlResolver
{
public override Uri ResolveUri(Uri baseUri, string relativeUri)
{
if (baseUri != null)
return base.ResolveUri(baseUri, relativeUri);
else
return base.ResolveUri(baseUri, HostingEnvironment.MapPath(relativeUri));
}
}
protected void Page_Load(object sender, EventArgs e)
{
// create the readers for the xml and xsl
XmlReader reader = XmlReader.Create(new StringReader(File.ReadAllText(HostingEnvironment.MapPath("~/xslt/home.xslt"))));
XmlReader input = XmlReader.Create(new StringReader(File.ReadAllText(HostingEnvironment.MapPath("~/xml/home.xml"))));
// create the xsl transformer
XslCompiledTransform t = new XslCompiledTransform(true);
t.Load(reader, null, new XsltUrlResolver());
sb = new StringBuilder(File.ReadAllText(HostingEnvironment.MapPath("~/xslt/url-encode.xslt")));
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%= sb.ToString() %>
</div>
</form>
</body>
</html>
谢谢你的帮助。这是一个难题。我不再传入XmlResolver,而是将导入的样式表的标准网址。这已经解决了测试页面的问题,但是我的完整代码仍然会抛出安全异常。 – 2009-11-04 22:22:27
你可以添加异常的调用堆栈到你的问题吗?这将有助于了解现在您修复第一个解决问题的位置。另外,你的样式表是否包含任何脚本?听起来像脚本不能包含在中等信任下的已编译样式表中。 – 2009-11-05 01:03:23
您可能还想调整自己的开发者服务器以在中等信任度下运行,这样您可以在离家较近的地方进行调试 - 这可能会加快诊断速度,而不是每次尝试修复时必须上传到GoDaddy。 :-) – 2009-11-05 01:04:22