091502CC8D7F487BA52A08145ED03720
  • Thomas Pollinger
  • 15.06.2018
  • DE

Root Cause Analysis: "Specified cast is not valid"

Da fragt man sich immer wieder mal, warum bestimmte Dinge jahrlang funktioniert haben. Doch dann plötzlich Ärger machen und Fehlermeldungen produzieren. Jedoch man dann erstmal nicht weiß warum. Wie in diesem Fall, bei dem sehr viel Zeit und Geduld notwendig war.


Regel 41

Dein Code funktioniert, ohne dass du dir erklären kannst, wieso er das tut. (Entwicklerweisheit)


Verhalten

Diese nachfolgenden Fehlermeldung kommt aus dem wsms.log:

Reddot.CMS.Rendering.Tags.NavigationTag.Render (:0)
Locals: Project: {GUID}; ProjectVariant: {GUID}; Language(Page): {GUID}; Page(ID/UUID): {ID}; ContentClass: {GUID}; RenderMode: SmartEdit; RequestId: {ID}; 
System.InvalidCastException: Specified cast is not valid.
   at Reddot.CMS.Rendering.Tags.NavigationTag.Render(IRenderStream outputStream, ITagProcessor tagProcessor, XmlNode tag, IObjectLoadManager objectLoadManager, IPageRenderingContext context)

Ursache

Die Ursache ist, sofern man sie dann gefunden hat, logisch. Auch wenn dieses Konstrukt doch evtl. etwas sehr speziell ist ;)

<reddot:cms>
  <htmltext>
    <meta name="hierarchy" content="</htmltext>
    <navigation areaname="navigationHTML-Hierarchy" usehiddenindexes="Bool:False" userights="Bool:False" useParallelRenderThreadsForNavigationLevels="Bool:True" pageguid="Guid: <!IoRangeList><%infoPageGUID%><!IoRangeDynLink><%listNavigation%><!/IoRangeDynLink><!/IoRangeList>" /><htmltext>" />
    <meta name="hierarchyNames" content="</htmltext>
    <navigation areaname="navigationHTML-HierarchyNames" usehiddenindexes="Bool:False" userights="Bool:False" useParallelRenderThreadsForNavigationLevels="Bool:True" /><htmltext>" />
  </htmltext>
</reddot:cms>

Denn es gibt im Projektbau Zustände, welche man nicht immer beim erstellen der Struktur im Blick hat. Wie in diesem Fall, wenn es zu dem Zustand kommt, dass pageguid="Guid:" übergeben wird. Denn einen Cast von "" nach GUID ist nicht erlaubt.


Lösung

Man sollte solche stellen immer so bauen, dass es nur definierte Zustände gibt oder der betroffene Block komplett entfernt wird. Gerade wenn man RenderTags einsetzt, die doch schon an der einen oder anderen Stelle sehr speziell reagieren.

<reddot:cms>
  <htmltext>
    <meta name="hierarchy" content="</htmltext>
    <navigation areaname="navigationHTML-Hierarchy" usehiddenindexes="Bool:False" userights="Bool:False" useParallelRenderThreadsForNavigationLevels="Bool:True"<!IoRangeConditional> pageguid="Guid:<!IoRangeList><%infoPageGUID%><!IoRangeDynLink><%listNavigation%><!/IoRangeDynLink><!/IoRangeList>"<!/IoRangeConditional> /><htmltext>" />
    <meta name="hierarchyNames" content="</htmltext>
    <navigation areaname="navigationHTML-HierarchyNames" usehiddenindexes="Bool:False" userights="Bool:False" useParallelRenderThreadsForNavigationLevels="Bool:True" /><htmltext>" />
  </htmltext>
</reddot:cms>

Über den Autor:
Thomas Pollinger

... ist Senior Site Reliability Engineer bei der Vodafone GmbH in Düsseldorf. Seit dem Jahr 2007 betreut er zusammen mit seinen Kollegen die OpenText- (vormals RedDot-) Plattform Web Site Management für die deutsche Konzernzentrale.

Er entwickelt Erweiterungen in Form von Plug-Ins und PowerShell Skripten. Seit den Anfängen in 2001 (RedDot CMS 4.0) kennt er sich speziell mit der Arbeitweise und den Funktionen des Management Server aus.

       

Downloads

 

QuickLinks

 

Channel