2010-07-07 3 views
2

Avis de non-responsabilité, je suis le support technique et administrateur système pour mon entreprise, pas un développeur. Je ne suis pas après les détails, simplement une idée si ce que je voudrais réaliser est possible ou non. Nous hébergeons des centaines d'instances de notre application logicielle de commerce électronique classique ASP interne et, en raison d'innombrables personnalisations par les clients et nous-mêmes, la gestion des versions est cauchemardesque, le code personnalisé ne peut pas être géré et nous avons abandonné fonctionnalités et déployer massivement des corrections de bugs en raison de l'incapacité de suivre qui a besoin de quels correctifs où.Refactorisation de plusieurs instances de logiciels de commerce électronique en base de code unique

Parellel à cette question, je fais des scripts de gestion pour mieux automatiser cela. Quoi que je veuille vraiment faire est d'utiliser l'effort miniumum possible, port le code de l'application (pas la base de données) à une base de code unique. Questions que j'ai:

  • peut gérer ASP relativement effeciently se connecter à différentes bases de données en fonction de l'en-tête d'hôte étant appelé? Je prévois une extension de base à la routine, obtenir les informations d'identification db de l'hostheader db dans Metadb, définir la chaîne de connexion de l'application en conséquence logique. L'application écrit quelques fichiers sur le serveur web à partir de la base de données à des fins de mise en cache, je voudrais gérer cela en émulant ce comportement en l'écrivant à quelque chose comme /masterapp/customer1/specificfile.htm puis en changeant les références à /specificfile.htm dans le code pour plus comme/masterapp/nom du magasin /specificfile.htm. Évidemment, les routines qui écrivent specificfile.htm écriraient au nouvel emplacement en conséquence. Est-ce que cela semble raisonnable? Autres contenus spécifiques aux magasins liés au serveur Web comme les images et les fichiers CSV Je dois continuer à travailler sans que les URL ne changent idéalement, ASP peut utiliser la logique pour rediriger les demandes de /images/example.jpg vers/masterapp/ /images/example.jpg ou/shopname /images/example.jpg en fonction de l'en-tête de l'hôte? Ou cela pourrait-il être fait via isapirewrite? (que nous utilisons déjà)

Je pense que ce sont les plus grands défis. Je n'ai pas besoin d'un plan de projet complet sur la façon de mettre en œuvre chacune de ces choses, je veux juste savoir si c'est possible. Si la réponse est «oui», je devrais être capable de vendre mes patrons sur le développement en raison de l'économie de temps de support et nos développeurs internes pourraient, je l'espère, gérer cela.

Répondre

0

Ce devrait être être possible et j'ai obtenu des résultats similaires avec du code développé de cette façon depuis le début. Au fur et à mesure que vous réaménagez cela, cela va être beaucoup plus difficile, mais c'est différent de votre véritable question.

Pour répondre à vos points réels:

  • On peut supposer que la chaîne de connexion DB est déjà dans une variable d'application ou fichier de paramètres? Si c'est le cas, vous avez juste besoin d'une logique dans votre global.asa Session_OnStart qui lit l'en-tête de l'hôte et sélectionne la chaîne de base de données appropriée. Cela pourrait être codé en dur ou vous pourriez avoir un DB de «contrôle» qui stocke des sites, leurs chemins de fichiers de chaînes de DB, etc. et qui transfère les détails dans l'objet de session.

  • Ceci est lié à ce qui précède, tirez vos emplacements de stockage du cache de la base de données ou un nom de base « nom du répertoire convivial » pour chaque site, de sorte que vous pouvez avoir "/masterapp/" & Session("strSiteBaseName") & "/cache/somefile.htm"

  • Si vous êtes IIS7 alors vous pouvez utiliser le module de réécriture d'URL pour gérer cela, si vous êtes sur IIS6 il y a des outils tiers que vous pouvez obtenir pour faire de la réécriture d'URL pour vous. Encore une fois, j'ai fait cela, donc je peux témoigner que cela fonctionne. Si vous voulez être vraiment intelligent, vous pouvez demander à votre application principale de créer les fichiers de réécriture pour vous et de "toucher" web.config pour les charger dans IIS.

Un "gotcha" que vous aurez avec les en-têtes de l'hôte est de ne pas oublier de gérer les enregistrements www et no-www!

Vous avez également mentionné du code personnalisé pour chaque site, je n'ai pas fait cela en production mais j'ai testé en dehors d'une application et vous pouvez réécrire des fonctions après qu'elles ont déjà été déclarées. Vous ne pouvez pas inclure des noms de variables, mais vous pouvez les charger dans un fichier texte et les exécuter. Il existe donc un moyen d'avoir des fonctions personnalisées ou de modifier des fonctions de base spécifiques à une instance de votre application principale.

Questions connexes