当我第一次访问SiteEdit的代理网站时,所有内容都正确加载,我可以启用SiteEdit并进行正常交互。但是,如果单击页面上的任何链接,执行简单的F5刷新或直接键入代理站点的其他URL,我会收到错误。在错误页面上,我仍然看到“SiteEdit”按钮启用SiteEdit模式,但在它后面(基本上是代理页面显示的框架)我有一个简单的“代理中出现错误”消息。
在内容管理器服务器上,我可以查看应用程序事件日志,看到SiteEdit报告的错误是“从传入请求中读取错误。对象引用未设置为对象的实例。”
如果我关闭浏览器然后加载我试图访问的页面,一切正常。但是,如果我刷新或尝试转到任何其他页面(链接或直接),我再次收到错误。关闭浏览器并重复...
任何人都可以对此有所了解吗?我目前正在将SiteEdit 2009 SP2升级到SP3,这是我们的生产(SP2)和我的沙箱(SP3)环境中存在的问题。当然,我们的内容编辑器不使用SiteEdit(几乎是因为这个),我希望SP3升级可能已经解决了它的核心(但显然没有)。
我假设我已经正确配置了IE9(我的Intranet区域中有站点,我有相应的脚本权限设置,我允许弹出窗口等),因为它适用于初始渲染,但任何尝试都在转到另一个页面的同一个浏览器会话失败。
感谢您提供的任何见解。
答案 0 :(得分:0)
自从我联系支持部门已经有几周了,但是在几个回程和他们最后向我询问了对象引用错误的堆栈跟踪。
这使我与我的一位同事(他们一直在深入研究Tridion的日志记录)一起调整日志配置,以便查看堆栈跟踪输出。不幸的是,在报告问题以支持我重置我正在处理的环境(因为我也一直致力于升级到Tridion 2011),当他们提出此请求时,SiteEdit没有登录应用程序事件日志,因为它配置为(我认为这可能是许可问题)。
为了获得堆栈跟踪,我的同事更改了\ Tridion \ SiteEdit 2009 \ tridion.logging.config以登录文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=349a39f202fa9b53" />
</configSections>
<loggingConfiguration name="Logging Application Block" tracingEnabled="true" defaultCategory="General" logWarningsWhenNoCategoriesMatch="false">
<listeners>
<add name="Log File" fileName="C:\Tridion\log\SiteEdit.log" formatter="Tridion Text Formatter" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=349a39f202fa9b53" traceOutputOptions="None" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=349a39f202fa9b53" />
</listeners>
<formatters>
<add template="{timestamp} <{win32ThreadId}> {message}" type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=349a39f202fa9b53" name="Trace Text Formatter" />
<add template="{message}

Component: {keyvalue(component)}
Errorcode: {keyvalue(errorcode)}
User: {keyvalue(username)}

{keyvalue(stacktrace)}" type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=349a39f202fa9b53" name="Tridion Text Formatter" />
</formatters>
<categorySources>
<add switchValue="All" name="General" />
</categorySources>
<specialSources>
<allEvents switchValue="All" name="All Events">
<listeners>
<add name="Log File" />
</listeners>
</allEvents>
<notProcessed switchValue="All" name="Unprocessed Category" />
<errors switchValue="All" name="Logging Errors & Warnings" />
</specialSources>
</loggingConfiguration>
</configuration>
一旦将日志记录配置为写出文件,我们就能看到异常的堆栈跟踪:
从传入的请求中读取时出错。
对象引用不是 设置为对象的实例。
组件: SiteEdit.Proxy
错误代码:0
用户:NT AUTHORITY \ IUSR
StackTrace信息详情:
在 Tridion.Web.UI.SiteEdit.Proxy.Helper.CopyRequestCookies(HttpRequest的 请求,CookieContainer cookieContainer)
在 Tridion.Web.UI.SiteEdit.Proxy.Request.RequestFactory.CreateRequest(HttpRequest的 请求) Tridion.Web.UI.SiteEdit.Proxy.Request.RequestFactory.CreateRequest(HttpRequest的 请求) Tridion.Web.UI.SiteEdit.Proxy.RedirectModule.context_BeginRequest(对象 发件人,EventArgs e)
由于对象引用错误位于名为“CopyRequestCookies”的方法中,因此我们决定查看我们的cookie(自关闭和重新打开浏览器以来,这有意义导致SiteEdit再次运行,但仅针对单个请求)。
果然,我们有一个奇怪的cookie,用于简单地验证用户已打开cookie。 javascript代码(我认为我的开发人员从某处在线获得)是:
document.cookie = 'CookieTest';
if (document.cookie == "") {
$("form").append('<div class="master-error"><p>Cookies are not enabled</p></div>');
}
请注意,cookie没有值(典型的JS为document.cookie = 'name=value';
)。我们认为在代理逻辑中,它将为代理站点提交的cookie传递到暂存站点,有些代码没有预期到没有值的cookie(在Fiddler中,您可以看到cookie只是通过了作为“CookieTest;”),但没有进行防御编码以处理该场景。
通过更改我们的代码以将值应用于cookie document.cookie = 'CookieTest=true'
,SiteEdit代理正常运行。