【问题标题】:How to fix proxy error with SDL Tridion SiteEdit 2009 SP2/3如何使用 SDL Tridion SiteEdit 2009 SP2/3 修复代理错误
【发布时间】:2012-11-15 10:02:45
【问题描述】:

当我第一次访问 SiteEdit 的代理网站时,一切都正确加载,我可以启用 SiteEdit 并正常交互。但是,如果我单击页面上的任何链接、执行简单的 F5 刷新或直接为代理站点输入不同的 URL,我会收到错误消息。在错误页面上,我仍然看到启用 SiteEdit 模式的“SiteEdit”按钮,但在它后面(基本上是代理页面显示的框架)我有一个简单的“代理中发生错误”消息。

在内容管理器服务器上,我可以查看应用程序事件日志,发现 SiteEdit 报告的错误是“从传入请求中读取错误。对象引用未设置为对象的实例。”

如果我关闭浏览器然后加载我试图访问的页面,一切正常。但是,如果我刷新或尝试转到任何其他页面(链接或直接),我会再次收到错误消息。关闭浏览器并重复...

任何人都可以对此有所了解吗?我目前正在将 SiteEdit 2009 SP2 升级到 SP3,这是我们的生产 (SP2) 和沙盒 (SP3) 环境中存在的问题。自然,我们的内容编辑器不使用 SiteEdit(几乎正因为如此),我希望 SP3 升级可能已经解决了它的核心问题(但显然还没有)。

我假设我已经正确配置了 IE9(我的网站在我的 Intranet 区域中,我设置了适当的脚本权限,我允许弹出窗口等),因为它适用于初始渲染,但在同一浏览器会话转到另一个页面失败。

感谢您提供的任何见解。

【问题讨论】:

  • 嘿,雅各布。您是否将此问题报告给 SDL 的支持人员?如果没有人报告这样的问题,那么新版本中没有修复它也就不足为奇了。
  • 不,我没有联系支持。我想我喜欢社区方法(并可能帮助遇到此问题的其他人),而不是直接获得支持。如果您认为这是最明智的,我会继续联系支持人员(并且可以在此处报告可能的解决方案)。
  • Stack Overflow 非常适合有(相对确定的)答案的问题。它不适用于故障排除,这通常会导致大量来回的 cmets。我建议将这些人带到更常规的论坛(例如 forum.sdltridionworld.com 上的论坛)或只是提供者的常规支持渠道。
  • 所有浏览器都会出现这个问题吗?还是只在 IE9 中?
  • 我实际上是在 6 天前在论坛网站上问过它,但没有得到任何回应......这就是我把它带到这里的原因。我已经按照建议打开了一张支持票,因为我可以理解不想在 Stack 上进行故障排除。我只是想也许社区中的其他人遇到了这个问题,并且立即知道了解决方案,或者只需最少的来回挖掘。

标签: tridion tridion-2011 siteedit


【解决方案1】:

自从我联系支持部门以来已经过去了几个星期,但在与配置和设置来回反复的过程中,他们最终要求我提供对象引用错误的堆栈跟踪。

这导致我与我的一位同事(最近一直在研究 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} &lt;{win32ThreadId}&gt; {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}&#xA;&#xA;Component: {keyvalue(component)}&#xA;Errorcode: {keyvalue(errorcode)}&#xA;User: {keyvalue(username)}&#xA;&#xA;{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 &amp; Warnings" />
    </specialSources>
  </loggingConfiguration>
</configuration>

一旦将日志记录配置为写入文件,我们就可以看到异常的堆栈跟踪:

从传入请求中读取错误。
对象引用不 设置为对象的实例。

组件: SiteEdit.Proxy
错误代码:0
用户:NT AUTHORITY\IUSR

StackTrace 信息详细信息:
at 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 代理可以正常工作。

【讨论】:

    猜你喜欢
    • 2012-06-11
    • 2012-10-13
    • 1970-01-01
    • 2012-06-04
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2012-05-06
    相关资源
    最近更新 更多