Dynamique des points de terminaison dans ServiceReferences.ClientConfig
Lors de la construction d'une application, il est souvent déployés dans les différents environnements (test, dev, prod), et, par conséquent, les adresses des points de terminaison sont en train de changer. Comme le ServiceReferences.ClientConfig est construit comme une partie de Silverlight .fichier xap, il est difficile de changer les points de terminaison après la création de la solution, comme c'est souvent fait avec web.config.
J'ai cherché un peu, mais je ne peux comprendre ce que sont les meilleures pratiques ici, donc ma question est:
Quelles sont les meilleures pratiques quand il s'agit de dynamique wcf adresse de point de terminaison de configuration dans silverlight?
À préciser, selon le serveur sur lequel l'application est sur (test,dev, prod) les points de terminaison du changement:
<endpoint
name="MyService"
address="http://testserv/MyService.svc"
binding="basicHttpBinding"
bindingConfiguration="MybasicHttpBinding"
contract="MyApp.MyService"
/>
<endpoint
name="MyService"
address="http://prodserv/MyService.svc"
binding="basicHttpBinding"
bindingConfiguration="MybasicHttpBinding"
contract="MyApp.MyService"
/>
D'une certaine façon, j'ai besoin du client silverlight pour savoir lequel utiliser, selon le serveur sur lequel ses qui permettent de construire est compilé.
Le client silverlight est à l'aide de / référencement des services wcf qui a une adresse dynamique selon le serveur sur lequel nous sommes (prod,test,dev).
OriginalL'auteur randoms | 2011-09-09
Vous devez vous connecter pour publier un commentaire.
Après la lecture de sLedgem post, et quelques recherches sur google, j'ai trouvé la solution parfaite pour faire ServiceReferences agir comme web.config.
Tout d'abord:
Créer les différents fichiers manuellement;
Vous pouvez ajouter votre propre ainsi si vous avez plus de deux configurations par défaut dans Visual Studio.
Deuxième:
Ajouter la dépendance de fichiers dans le Projet.csproj file (Ouvrir le fichier de projet dans un éditeur de texte):
Maintenant, lorsque vous rechargez le projet, vous verrez que ServiceReferences.La libération.ClientConfig est extensible dans l'Explorateur de solutions, et lorsque vous les développez, vous allez voir le Communiqué et le fichier de Débogage.
Troisième: Ajouter des règles de Transformation pour le fichier de Projet juste avant la fermeture
</Project>
(encore une fois, l'ouvrir dans un éditeur de texte)
Ce qu'il fait est de regarder dans le correspondant servicereferences fichier, en fonction de votre configuration, et de copier /remplacer le code à l'aide de la même TransformXML bibliothèque web.config utilise.
Exemple:
dans mon ServiceReferences.ClientConfig j'ai le code suivant:
ServiceReferences.La libération.ClientConfig:
Comme vous pouvez le voir, le point de terminaison sera remplacé, et le match est fait sur le nom de l'attribut.
Si vous avez des questions, laissez-moi savoir 🙂
OriginalL'auteur randoms
Excellente solution au problème
Je ne pouvais pas obtenir le
<ItemGroup></ItemGroup>
section de travailler efficacement dans ma solution.Je l'ai retiré et a ajouté le script suivant pour mon Paquetage événement dans le projet:
OriginalL'auteur Yossi
Vous pouvez le faire en cours d'exécution en utilisant le constructeur de la WCF client dans SL qui prend configuration des ordinateurs d'extrémité nom et l'adresse. Le point de terminaison du nom de la configuration est juste "MyService" dans votre exemple. L'adresse de l'argument que vous fournissez prendra la place de celui inclus dans ClientConfig.
L'un des moyens pour calculer l'adresse de votre service au cours de l'exécution de SL (je ne garantis pas qu'il fonctionnera dans toutes les configuration de l'environnement):
Application.Actuel.De l'hôte.Source.AbsoluteUri et
HtmlPage.Document.DocumentUri.AbsoluteUri. Fondamentalement, vous prenez
caractères à partir du début du plus court chemin aussi longtemps qu'ils
casse-insensiblement caractères dans le chemin d'autres.
Infos Supplémentaires:
Cela peut paraître compliqué lorsque vous avez de nombreux services, mais ça peut être bien refait et avec une aide de l'Unité fait assez facile à utiliser pour n'importe quel service. Par exemple, j'utilise une fonction d'assistance qui enregistre un service client et c'est l'appel ressemble à ceci: ServicesHelper.RegisterService<MyServiceContractClient, IMyServiceContract>( "MyService" ); Quand j'ai besoin de créer une instance du service client, je viens de résoudre MyServiceContractClient type d'Unité qui utilise une injection constructeur pour créer une nouvelle instance de mon service déjà correctement configuré. Il peut également gérer HTTPS situation. Laissez-moi savoir si vous avez besoin de plus d'informations à ce sujet.
Voulez-vous dire que vous utilisez la croix-domaine d'appels? Si non, et que vous venez d'accueil des services WCF et SL dans la même application web puis la solution ci-dessus va travailler, même si vous accédez à votre application à partir d'un autre serveur que celui-ci est hébergé sur.
Btw, quand vous utilisez SL 4, vous pouvez utiliser des chemins relatifs: voir ici
Mon service WCF sera toujours local pour le XAP Silverlight, donc cette solution est idéale pour moi. Avoir à tirer de outre le .xap et modifier le ServicesReferences.ClientConfig, ou même en utilisant le web transforme, vraiment viole les principes de base de générations automatisées et des déploiements.
OriginalL'auteur tdracz
Ont un coup d'oeil ici:
http://weblogs.asp.net/srkirkland/archive/2009/10/13/common-web-config-transformations-with-visual-studio-2010.aspx
puis ici
http://www.funkymule.com/post/2010/03/08/XML-Transform-on-Silverlight-ClientConfig-Files.aspx
Il utilise le même principe derrière le web.config transformations (ie, web.la config est modifiée en fonction de ce qu'configuration de la compilation (c'est-libération, debug), de sorte que la serviceref.la config est modifiée en fonction de votre coup de tête lors de la compilation. fonctionne à merveille
OriginalL'auteur sLedgem
randoms " la réponse est sur place, sauf pour UNE petite chose. Ne marque pas le .Debug.ClientConfig et .La libération.ClientConfig comme "Contenu". De les marquer comme "None". De cette façon, votre .Debug.ClientConfig et .La libération.ClientConfig ne sont pas à mettre dans votre .fichier xap. Voici ce que mon Silverilght fichier de projet (et il fonctionne très bien):
OriginalL'auteur theBoringCoder