2010-01-28 5 views
8

Je suis curieux de savoir si d'autres ont abordé la gestion des versions pour les applications Silverlight.Stratégie de mise à niveau/mise à niveau de l'application pour l'application métier Silverlight?

J'ai une application métier qui doit être publié peu ANDAM concernés sur la façon de mises à jour « libérer » à cette application. Généralement, les utilisateurs de cette application laisseront l'application ouverte toute la journée (et potentiellement toute la nuit) sans la recharger.

Que se passe-t-il s'il est nécessaire de publier une modification qui inclut un changement d'interface de service Web? Comment cela peut-il être déployé sans causer d'erreurs du côté du client?

Nous avons grandi tellement habitués à déployer des applications ASP.Net simplement en laissant tomber le dernier code sur le serveur. Ma seule idée implique actuellement un numéro de version du client et une minuterie périodique pour vérifier les mises à jour.

J'aimerais beaucoup savoir ce que les autres ont fait avant d'implémenter cela.

Merci, Mike

+0

+1 Une très bonne question. – AnthonyWJones

+0

+1 D'accord - bonne question – serialhobbyist

+0

+1 convenu. Je soupçonne que cela devient également un problème encore plus important dans les applications hors navigateur hors-ligne. –

Répondre

1

je viens de répondre à une question sur la façon de faire en sorte que les fichiers .xap ne sont pas mises en cache par le navigateur, ce qui pourrait être une aide:
Prevent Silverlight xap from being cached by proxy server

Mais c'est pas utiliser si les utilisateurs jamais recharger votre application. Dans ma propre application, ce n'est pas un problème car les utilisateurs seront automatiquement éliminés chaque fois que nous déployons une mise à jour sur le service Web. Mais j'aime ton idée avec le minuteur, j'irais avec ça.

0

Déclarez l'évidence mais ne faites rien pour ennuyer vos utilisateurs. Par exemple. pouvaient-ils passer vingt minutes à entrer des données, à taper sur la machine à café et à cliquer sur Envoyer pour trouver la minuterie expirée, avoir remarqué une mise à jour et perdu leur travail en raison d'un redémarrage forcé?

Si c'est le cas, et j'admets que cela n'a pas eu beaucoup de réflexion, si par ex. vous devez apporter des modifications au service Web qui casse la version actuelle, pourriez-vous avoir la nouvelle version du service Web côte à côte de sorte que les utilisateurs ne soient pas expulsés avant que le délai ne soit expiré et que l'unité de travail ne soit terminée? Ou est-ce aussi l'évidence?

+0

Très vrai. La "méthode de temporisation" ne serait sûre que si les versions étaient déployées après des heures. Il ne serait utilisé pendant la journée que s'il y avait une libération d'urgence. –

+0

Dans ce cas particulier où les utilisateurs restent connectés pendant de longues périodes, peut-être que ce serait une bonne idée d'enregistrer automatiquement leur travail dans un stockage isolé à certains intervalles? Ensuite, si le délai expire et que l'application doit être rechargée, les éléments enregistrés automatiquement peuvent facilement être rechargés lorsque l'application est redémarrée. –

0

Pour le code serveur, c'est-à-dire que les points de terminaison fonctionnent comme d'habitude. pour le xap je pense que vous avez quelques options en fonction de la façon dont vous gérez les communications. Vous pourriez avoir une demande contenant un numéro de version et si le serveur a été mis à jour, puis forcer du code pour recharger le client, peu boiteux, désordonné mais faisable. Peut-être une solution plus propre serait de contrôler la session des clients, ce qui fait probablement partie intégrante des requêtes adressées au serveur. Lorsque vous déployez une nouvelle version, vous pouvez invalider la session client, en forçant peut-être une actualisation de page avec une logique personnalisée. Si votre protocole est à base de push, vous pouvez envoyer une commande au client pour faire ce que vous voulez, pour beaucoup de systèmes qui sont sur toute la journée il est probable que cette infrastructure existera (si vous l'avez bien construit :)). Par exemple, notre couche de service est extraite des modèles de référentiels et des modèles de vue, dans notre cas, nous pourrions envoyer une déconnexion ou une commande spécifique pour lancer une logique personnalisée sur le client informant que l'application est en cours de mise à jour navigateur une fois terminé. Notre coque est légère de sorte que nos modules (essentiellement d'autres xap) peuvent être mis à jour à temps pour l'actualisation.

0

Je vous recommande d'utiliser une solution comme mentionné dans l'App Guide Arch:

The Guide Chapter I mean voir Considérations relatives au déploiement.

  • Diviser l'application en modules logiques qui peuvent être mises en cache séparément, et qui peut être remplacé facilement sans obliger l'utilisateur à télécharger l'application entière à nouveau.
  • Version de vos composants.
0

Avez-vous envisagé de conserver un canal WCF polling duplex qui alerte l'application lorsqu'elle doit être rechargée? De plus, vous pouvez avoir vos appels WCF directement dans un répertoire virtuel qui contient des appels «interfacés». Par exemple:

application Silverlight hébergé sur "xxxx \ Default.aspx" parle Silverlight à WCF à "xxxx \ Version2 \ DataPortal.svc" Les pourparlers DataPortal.svc à un assemblage de GAC (ou autre base) qui peut identifier quelle version peut gérer quels appels. De cette façon, si vous effectuez une mise à niveau vers "x.x.x \ Version3 \ DataPortal.svc", vous pouvez toujours effectuer des appels sur Version2, en supposant que ces appels ont du code pour les convertir en un concept Version3.

Cela vous aide lorsque l'application de votre secteur d'activité propose un téléchargement xap dynamique ('principal', 'client', 'inventaire', etc.) et que vous souhaitez les libérer de manière indépendante.

Questions connexes