7
votes

Où stocker les paramètres d'application?


2 commentaires

L'utilisation de DB pour stocker les paramètres d'applications est OK mais veuillez stocker les paramètres dans le cache. Les paramètres de la configuration Web sont rapides à lire car ils sont dans la mémoire du serveur. Si vous lisez constamment les paramètres de la page à EvTy, envisagez d'ajouter de la mise en cache à vos paramètres et de les supprimer également du cache lorsque les SETTIN sont mis à jour.


Après votre édition, j'ai édité ma réponse. Notez que lorsque vous avez deux questions, demandez-leur séparément, au lieu d'ajouter la deuxième question à la précédente.


9 Réponses :


5
votes

Il est destiné aux paramètres d'application, mais pas à des paramètres destinés à être modifiés de manière dynamique pendant l'exécution. Au lieu de cela, c'est pour les paramètres qui ne changent que de temps en temps et où vous vous attendez (et même désirez) une application redémarrante lorsqu'elles changent.

Pour plus de paramètres éphémères, vous pouvez simplement utiliser un système de base de données simple - même un fichier plat / xml dans le app_data Dir peut fonctionner, si votre application n'utilise pas une base de données sinon.


0 commentaires

13
votes

web.config est généralement utilisé pour les paramètres en lecture seule, c'est-à-dire. Les paramètres définis lors du déploiement de l'application par l'administrateur système.

Si vous souhaitez lire et écrire les paramètres, la manière la plus évidente est d'utiliser la base de données. Au fait, cela a un avantage: une application peut être hébergée sur plusieurs serveurs et lira et écrivez correctement les paramètres correctement,

Vous pouvez également implémenter votre stockage personnalisé pour les paramètres, mais il sera probablement plus difficile à mettre en œuvre et pas beaucoup plus vite.


Pour répondre à votre deuxième question, la structure de votre base de données dépend du type de paramètres que vous souhaitez stocker.

Si vous avez besoin de Stocker des entrées uniques hétérogènes comme ceci:

  • adresse mail d'un administrateur,
  • Nombre maximum d'entrées à afficher sur la page d'accueil du site Web,
  • Texte à afficher sur "A propos de nous",
  • valeur booléenne indiquant si les commentaires publics sont activés ou non,

    Ensuite, vous devez utiliser varchar S ou d'autres types plus ou moins amicaux comme des clés pour identifier les entrées (plutôt que de les faire référence à leur index).

    D'autre part, si votre objectif est de Stocker les adresses de messagerie de plusieurs gestionnaires , vous devez créer une table contenant leurs adresses postales, noms, DateTime de leur dernière connexion, etc.

    vous ne devriez vraiment pas mélanger à la fois . En théorie, vous pouvez vous reporter à l'entrée dans Paramètres par la paire de composants / paramètres. En pratique, cela rend les choses plus difficiles et crée un tas de problèmes:

    • Et si, plus loin, vous aurez besoin, pour chaque responsable, de stocker une valeur booléenne indiquant si elle / elle souhaite recevoir des alertes de votre part? Avec votre structure actuelle, cela sera impossible.
    • car le même paramètre peut avoir plusieurs valeurs, comment avez-vous l'intention de gérer les paramètres qui doivent être uniques? Par exemple, il ne doit y avoir qu'une seule valeur de texte à afficher sur la page "A propos de nous". Et s'il y a deux valeurs stockées dans la base de données?

2 commentaires

Intéressant, je n'avais pas envisagé une application éventuellement en cours d'exécution sur plusieurs serveurs, mais cela a du sens. Dans mon cas, cela ne se produira probablement jamais parce que c'est pour un projet d'entreprise interne, mais c'est bon de garder à l'esprit.


Intéressant. Je cherchais juste comment stocker une valeur Single car il se sentait faux de reposer une table de base de données qui ne contiendrait jamais un enregistrement, un entier. Mais vous dites que le "web.config est généralement utilisé pour des paramètres en lecture seule" donne un sens aussi. À la suite de votre réponse (excellente), je suis confus quant à l'endroit où le meilleur endroit pour stocker une application large entier / écrire entier dans un service Web est.



5
votes

Oui.changing Le web.config réinitialisera l'application.Je maintenez généralement une table de paramètres pour stocker des paires de la valeur de clé pour les paramètres et l'accéder à partir de là.

Paramètres H2>
    SETTING_NAME         SETTING_VALUE

    AdminEmail            admin@mysite.com
    ErrorTrackingEmail    errors@mysite.com


1 commentaires

nom devrait être la clé primaire. Les colonnes séparées n'ont aucun sens



1
votes

Créer une table à valeurs de clé comme ceci:

settings:
name NVARCHAR(255) PRIMARY KEY
value NVARCHAR(255) NOT NULL


0 commentaires

6
votes

Stockage des paramètres dans web.config est utile car il facilite les paramètres différents dans différents environnements. Cependant, comme vous le dites, ce n'est pas une utilisation si vous souhaitez modifier les paramètres dans un environnement direct.

Une table de base de données simple est le moyen le plus utile de le faire si vous devez modifier les valeurs. p>

EG. P>

create table Settings
(Name varchar(50) primary key,
Value varchar(50))


1 commentaires

+1 pour sql_variant . NVARCHAR (MAX) n'est pas une bonne idée lors de la conservation des données de n'importe quel type (non de mentionner varchar (100) ).



1
votes

Tout d'abord, ce n'est pas du tout déraisonnable lorsque vous déterminez quelles informations sont censées être stockées dans le fichier web.config. Lorsque vous modifiez des informations telles que les informations de montage, les chaînes de connexion, etc., votre application doit arrêter et recharger les valeurs à exécuter avec ces paramètres.

Si vous stockez des paramètres d'application large, vous pouvez créer une table des paramètres de votre base de données ou même utiliser un fichier texte distinct pour stocker les paramètres.

Si vous parlez de stocker des paramètres par utilisateur, vous recherchez Propriétés du profil ASP.NET .


1 commentaires

Par "déraisonnable", je voulais dire que le "redémarrage" constant de la demande était un effet secondaire qui aurait des problèmes de performance que je ne pourrais pas tolérer. (Pas que la raison du redémarrage du redémarrage était déraisonnable ...) - Merci d'avoir souligné les propriétés du profil ASP.NET. Ce n'est pas exactement ce que je cherche, mais je pense que cela m'aidera avec un autre problème que j'ai ... :-)



1
votes

Les paramètres à l'échelle de l'application doivent certainement être stockés dans cette section du fichier web.config, car elle empêche les valeurs de codage rigide qui peuvent changer dans le temps. Il n'est pas nécessaire de les lire à l'aide de votre propre code, car il y a une méthode intégrée: utilisez le tableau System.Configuration.ConfigurationManager.AppSettings pour les récupérer (vous devez ajouter une référence à l'ensemble System.Configuration dans votre projet). Vous pouvez modifier également Appsettings via l'outil Administration de site Web ASP.NET, également (Menu Project -> Asp.net Configuration).

Pour les valeurs que vous envisagez de changer plus souvent et que le site est opérationnel, il est raisonnable d'utiliser un fichier XML, une base de données léger (telle que SQLite ou SQL Server compact), soit même un fichier texte pour ces paramètres.


0 commentaires

3
votes

J'ajoute habituellement un champ "type" à mon tableau de paramètres de sorte que je ne récupère que le groupe de paramètres requis Cela fonctionne pour moi comme moyen de regrouper des paramètres et de les récupérer à la fois.


2 commentaires

Dans quel scénario auriez-vous besoin d'obtenir un groupe de paramètres? Est-ce pour des raisons de performance principalement?


Certains paramètres sont regroupés tels que DirectoryPath, si je cherche un département de répertoire, je ne peux que tirer tous les paramètres où Type = DirectoryPath, puis simplement les utiliser.



0
votes

Si vous devez enregistrer les paramètres, vous pouvez toujours les enregistrer dans un fichier de configuration personnalisé.

J'ai fait juste qu'un moment de retour, et j'ai le code disponible pour le faire ici .


0 commentaires