none
StackOverflow bei eigenem SiteMapProvider (von XmlSiteMapProvider abgeleitet) RRS feed

  • Frage

  • Hallo,

    ich habe einen eigenen SiteMapProvider von XmlSiteMapProvider abgeleitet und die IsAccessibleToUser-Method überschrieben (weil die Standardimplementierung einfach nur schwachsinnig ist). Dies funktioniert auch soweit wie erwartet. Das Problem tritt auf, sobald ich auf eine externe Sitemap-Datei verweise und dabei meinen eigenen SiteMapProvider angebe:

    <siteMapNode title="Some Title" roles="*">
       <siteMapNode siteMapFile="~/another.sitemap" provider="MeinProvider"/>
    </siteMapNode>
    

    Dies produziert einen StackOverflow und das ganze fliegt mir heftigst um die Ohren. Wenn ich dabei meinen eigenen Provider NICHT angebe, wird der Standard XmlSiteMapProvider verwendet, obwohl ich diesen in der web.config ausdrücklich deaktiviert habe (glaubte ich jedenfalls):

    <siteMap defaultProvider="MeinProvider" enabled="true">
       <providers>
          <clear/>
             <add name="MeinProvider" description="Extended SiteMap provider." type="Some.Name.Space.MeinProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true"  />
          </providers>
    </siteMap>
    
    


    Hat jemand eine Erklärung dafür? Oder vielleicht sogar eine Lösung?

     

    Mittwoch, 14. September 2011 15:48

Antworten

  • Ich habe dieses Problem lösen können. Und wie immer gilt: kaum macht man's richtig, schon funktioniert's auch!

    Offensichtlich ist die Benutzung der Provider nicht so vorgesehen, wie ich es versucht habe (aber ich bin immer noch der Meinung, ein Konfigurationsfehler hier sollte nicht gleich den W3WP mit runterreißen).

    Der entscheidende Punkt ist, dass man in der web.config nicht Provider*TYPEN* registriert, so wie ich es zunächst verstanden hatte, sondern Provider*INSTANZEN* (hätte ich zugegebenermaßen wissen können, denn bei den anderen Providern ist es ja auch so). Ich habe nun in der web.config folgendes ankonfiguriert:

    <siteMap defaultProvider="MeinProvider" enabled="true">
       <providers>
          <clear/>
          <add name="MeinProvider" description="Extended SiteMap provider." type="Some.Name.Space.MeinProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true"  />
          <add name="Another" type="Some.Name.Space.MeinProvider" siteMapFile="another.sitemap" securityTrimmingEnabled="true" />
       </providers>
    </siteMap>
    
    


    Auf diese zweite Instanz kann ich dann in der Default-Sitemap verweisen:

    <siteMapNode title="Some Title" roles="*">
       <siteMapNode provider="Another"/>
    </siteMapNode>
    

    Und schon funktioniert's...

    • Als Antwort markiert __it__ Freitag, 16. September 2011 11:39
    Freitag, 16. September 2011 11:37

Alle Antworten

  • Nachtrag: habe das ganze gerade mal nur mit dem Standard XmlSiteMapProvider ausprobiert, und das Problem tritt immer noch auf!

    Sieht so aus, als wäre die Angabe des Providers zu einer SiteMapNode generell nicht möglich. Kann das sein?

    Mittwoch, 14. September 2011 15:54
  • Ich habe dieses Problem lösen können. Und wie immer gilt: kaum macht man's richtig, schon funktioniert's auch!

    Offensichtlich ist die Benutzung der Provider nicht so vorgesehen, wie ich es versucht habe (aber ich bin immer noch der Meinung, ein Konfigurationsfehler hier sollte nicht gleich den W3WP mit runterreißen).

    Der entscheidende Punkt ist, dass man in der web.config nicht Provider*TYPEN* registriert, so wie ich es zunächst verstanden hatte, sondern Provider*INSTANZEN* (hätte ich zugegebenermaßen wissen können, denn bei den anderen Providern ist es ja auch so). Ich habe nun in der web.config folgendes ankonfiguriert:

    <siteMap defaultProvider="MeinProvider" enabled="true">
       <providers>
          <clear/>
          <add name="MeinProvider" description="Extended SiteMap provider." type="Some.Name.Space.MeinProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true"  />
          <add name="Another" type="Some.Name.Space.MeinProvider" siteMapFile="another.sitemap" securityTrimmingEnabled="true" />
       </providers>
    </siteMap>
    
    


    Auf diese zweite Instanz kann ich dann in der Default-Sitemap verweisen:

    <siteMapNode title="Some Title" roles="*">
       <siteMapNode provider="Another"/>
    </siteMapNode>
    

    Und schon funktioniert's...

    • Als Antwort markiert __it__ Freitag, 16. September 2011 11:39
    Freitag, 16. September 2011 11:37