11
votes

Plan du site brise au hasard au fil du temps

J'ai eu des erreurs d'exécution de la production que je ne comprends pas complètement. Cela nous est arrivé sur quelques sites Web ASP.NET 4.0 différents ( shudders - oui, je sais - nous le portant à MVC mais qui prend du temps).

Tout d'abord , nous n'avons jamais été en mesure de reproduire ce problème dans les environnements de développement / QA. Deuxièmement, lors du déploiement, le problème semble être inexistant. Parfois, le problème se manifeste dans les jours ou deux de déploiement et d'autres fois que le déploiement sera vivant pendant un mois sans se manifester du tout. Cependant, une fois qu'il se manifeste, toute page visualisée sous le site Web provoque l'erreur. Enfin, ce problème sembla venir seulement venir une fois que nous avons migré vers .NET 4.0. Nous avons commencé à 2,0, il y a un an à 3,5 ans et nous avons récemment augmenté de 4,0 avec cette solution et la plupart des projets d'enfants.

L'erreur: n'a pas pu trouver le noeud de planite avec URL '~ / par défaut.aspx'.

une version simplifiée de notre site Sitemap (avec certains noms de noms de modification et de désintéressation supprimés) est la suivante: xxx

il est enregistré dans notre web.config: xxx

et des journaux, j'ai réduit la diminution de l'erreur est dans une classe de base qui à peu près toutes nos pages dérivent de: xxx

J'ai confirmé dans tous les sitemaps qu'il existe un nœud avec URL = "~ / par défaut .aspx "avec roles =" * "(qui inclut l'accès public / anonyme), donc je suis très confus quant à pourquoi ce problème se produit.

Les problèmes que j'ai envisagés:

  1. Sitemap n'a pas de nœud pour défaut.aspx. tous font.
  2. Par défaut de Sitemap.aspx Node n'est pas accessible pour des raisons de sécurité à l'utilisateur / rôle actuel. Ils sont tous accessibles aux utilisateurs anonymes et ce problème existe même pour les utilisateurs Super Admin.
  3. URL passède contient QueryStrings (par défaut.aspx? ABCD). Je ne sais pas si ceci est un problème (j'espère sûr que non), mais une fois que le problème se manifeste, je peux manifester l'URL sans querystrings et le problème existe toujours.
  4. Plan du site change. ça ne doit pas
  5. Les autorisations du service au fichier du site. Le plan du site fonctionne parfaitement bien après un déploiement, de sorte que, à moins que les autorisations ne changent de manière à ce que IISRESET corrige, ce n'est pas un problème.
  6. Le processus de travailleur devient globalement corrompu. je ne pense pas. Nous avons ~ 12 sites Web dans le même pool d'applications et le problème reste toujours confiné dans un seul site Web. En outre, nous n'avons pas encore cela pour cela arriver à plus d'un site Web unique à la fois, bien qu'il s'est manifesté dans 4 différentes jusqu'à présent.

    Quelqu'un peut-il perdre une lumière sur cela? Il semble presque comme si le planite compilé de manière dynamique est corrompu ou quelque chose. La seule résolution que j'ai trouvée est un iisreset ou équivalent. Et même alors, il n'ya pas de dire quant à combien de temps le problème sera résolu. Ceci est très frustrant!


6 commentaires

De quel serveur est-ce hébergé?


Nous avons toujours ce problème et j'aimerais toujours avoir une réponse pour cela ...


Peu de choses étranges dans votre code, je ne comprends pas. ~ est le site Web racine: pourquoi ~ /../? Travaillez-vous avec des sites Web distincts IIS? vide privé page_load sur une page de base: privé et non protégé (l'événement est viré?)? Page_load sur la page de base au lieu de surcharger? Il semble s'agir d'une erreur de contexte de site Web: votre environnement de production IIS peut différer?


Si vous avez mis à niveau vers .NET 4, pourquoi les types de xmlsitemAvrovider sont-ils toujours pointés vers la version 2? Une trace de pile serait également agréable de voir et vous devriez envisager d'ajouter du code pour vider le contenu de l'instance xmlsitemAvousider lorsque l'erreur se produit.


>> (Shudders - Oui, je sais - nous le portant à MVC mais cela prend du temps) .. Prenez une profonde respiration. Vous aurez toujours des bugs dans mvc


Je n'ai jamais répondu aux questions ci-dessus. Pour pourquoi ~ /../ke/ code>, nous avons plusieurs applications Web qui sont "intégrées" via URL Navigation dans notre menu et notre menu est motivé par le plan du site. Clairement, nous avons plus de 3 pages dans chaque application afin que le site ci-dessus soit simplifié un peu, mais c'est pourquoi nous avons le ~ /../ Chemins. Oui, page_load est tiré (nous avons d'autres trucs là aussi). Pour xmlsitemApprovider , voilà ce que msft a pour .NET 4: msdn.microsoft.com/en-us/Library/...


3 Réponses :


0
votes

hmm. Son été quelques années depuis que j'ai travaillé avec ASP.NET, mais si je me souviens, j'ai eu un problème similaire que j'ai résolu avec xxx

au moment de l'exécution, les URL du site Sitemap sont résolues à l'URL actuelle. , de sorte que la tilde est retirée et remplacée par l'URL actuelle (je pense :)).


2 commentaires

Alors l'avez-vous résolu vous-même? OIF Ainsi, d'autres personnes peuvent être intéressées à savoir comment. Comme je l'ai dit, c'est un moment.


Nope, la solution de bande la moins intrusive que j'ai trouvée et utilisée aujourd'hui est d'avoir un service automatisé email moi chaque fois que cela se passe et que j'effectue une modification triviale vers le web.config pour forcer l'application à recompiler (comme l'ajout d'un espacer). Toujours pas de vraie solution.



0
votes

J'ai deux idées possibles pour ce problème. Ni n'est garanti de travailler. ; -)

  1. est-il possible que vous utilisiez également une autorisation d'URL au même? Temps dans certains de vos fichiers web.config situés dans différents dossiers Tout au long de votre application Web? P>

    exemple de paramètre d'autorisation d'URL qui pourrait être trouvé dans un Web.config File: P>

    <asp:SiteMapDataSource
        id="SiteMapDataSource1"
        runat="server"
        StartingNodeUrl="~/Default.aspx">
    </asp:SiteMapDataSource>
    


0 commentaires

2
votes

Je mettais un post précédent sur ce fil qui a été supprimé :( de toute façon que j'ai "eu" le même problème.

J'ai trouvé que peu importe ce que j'ai fait "Impossible de trouver le nœud Plan du site avec URL '~ / RootNode "Je suis arrivé. Ma pause est arrivée lorsque j'ai décidé de supprimer la dépendance du système de fichiers et de passer au sqlsitemApprovider code> du code méchant. J'ai constaté que ce problème était plus fiable recréé. p>

En bref, vous obtenez ce message car il n'y a pas de plan de site! J'ai trouvé que sur la source de données cartographique du site si vous utilisez le débutnodeurl = "~ / root.htm" code> puis le message d'erreur apparaîtra quand N'y a-t-il pas de plan de plan de plan. Toutefois, si vous utilisez débutnodeoffset = "0" code>, le message d'erreur n'est pas affiché et il n'y a tout simplement pas de menu rendu lorsque le site n'est pas construit. P>

semblait étrange pour moi mais je l'ai retrouvé au XMLSitemAlvider. Parfois, il a construit parfois ce n'est pas le cas. Impossible de me mettre complètement la tête sous le capot, mais cela ressemblait à quelque chose qui se passe asynchroneusement. Anyh ow, je suis passé au SQLSitemAlvider de WickedCode. p>

Un changement que j'ai fabriqué, de côté de la conversion en VB consistait à mettre un appel récursif sur le retour du [code> BuildsItemap code> Méthode: p>

' Return the root SiteMapNode
If _Root Is Nothing Then
   Return Me.BuildSiteMap
Else
   Return _Root
End If


0 commentaires