J'ai une application client de service Web qui se connecte au service Web d'un tiers. La 3ème partie a mis à jour son service web, mon application client échoue maintenant avec les exceptions SOAP. Malheureusement, je ne peux pas simplement mettre à jour mon application pour qu'elle fonctionne avec le nouveau service Web, car certains de mes utilisateurs continueront d'utiliser l'ancien service Web. Donc, fondamentalement, je voudrais être en mesure de travailler avec l'une ou l'autre version du service Web en utilisant une seule version de mon application client.Choix de l'espace de nom 'using' au moment de l'exécution
Étant donné que Visual Studio génère un tas de code que je compile lors de l'ajout d'une référence Web, j'ai maintenant deux fichiers: un fichier généré pour chaque version du service Web. Les deux API sont en fait identiques, ce sont simplement les messages SOAP sous-jacents qui semblent avoir changé. J'ai mis chacun de ces fichiers générés dans leur propre espace de noms pour éviter les collisions. Donc maintenant je voudrais pouvoir choisir quel espace de noms utiliser lors de l'exécution (basé sur un paramètre de configuration).
Par exemple:
if (useOldVersion)
using OldVersionNamespace;
else
using NewVersionNamespace;
De toute évidence, cela ne marchera jamais car il n'y aurait aucun moyen de compiler le code qui fait référence à des éléments dans cet espace de noms. Existe-t-il un moyen facile de résoudre ce problème? Peut-être que je pourrais utiliser la réflexion pour faire ce dont j'ai besoin à l'exécution? La seule chose à laquelle je pense vraiment serait de copier/coller littéralement mon code actuel dans deux fichiers différents, la seule différence étant l'espace de noms utilisé en haut. Cela semble être une très mauvaise idée.
Est-ce que ça doit être l'exécution? Si l'application utilise toujours la même version (l'une ou l'autre) pour un client spécifique, vous pouvez utiliser #if pour créer deux versions de l'application. – configurator
Ouais, il doit être à l'exécution car certains utilisateurs finissent par passer au nouveau service Web et cela doit se produire sans qu'ils aient à mettre à jour l'application cliente. – Jason