J'utilise un service wcf avec mon application silverlight. L'emplacement du service wcf est indiqué dans le fichier ServiceReferences.ClientConfig et doit être remplacé par l'emplacement où l'application est installée. Toutefois, ce fichier est inclus dans le fichier xap et ne peut pas être facilement modifié lorsque l'application est déployée. Y at-il une autre façon de faire la référence au service wcf à partir de l'application Silverlight? Ou comment modifiez-vous le ServiceReferences.ClientConfig dans le fichier xap?Silverlight: Comment configurer ServiceReferences.ClientConfig lorsqu'il est placé dans xap
Répondre
J'ai trouvé une solution dans ce blog.
http://www.andybeaulieu.com/Default.aspx?tabid=67&EntryID=132
Ici, le point final de service WCF est calculé à partir de l'emplacement de l'application silverlight
Il peut y avoir de meilleures façons, que je suis ouvert à l'utilisation, mais cela fonctionne pour moi et il est flexible.
Dans votre ajouter une variable Web.config, Web application dans AppSettings et stocker l'URL de base, notez que je ne suis pas stocker l'emplacement du fichier SVC, je vais ajouter plus tard. C'est parce que j'ai plusieurs SVC que je désigne habituellement. Vous pouvez choisir de le faire différemment.
<appSettings>
<add key="ServiceURI" value="http://localhost:64457/"/>
</appSettings>
Dans mon Web Page Web de l'application, ajoutez un param appelé InitParms, ce qui vous permet d'ajouter une liste de clé, les valeurs de paires (séparées par une virgule qui sera lu par le fichier XAP)
<div id="silverlightControlHost">
<object data="data:application/x-silverlight," type="application/x-silverlight-2"
width="100%" height="100%" ID="Xaml1" >
<param name="InitParams" value="ServiceURI=<%= ConfigurationManager.AppSettings("ServiceURI") %>" />
dans Silverlight App.xaml.vb, charger tous les InitParms dans une ressource ou où vous voulez
Private Sub Application_Startup(ByVal o As Object, ByVal e As StartupEventArgs) Handles Me.Startup
If e.InitParams IsNot Nothing Then
For Each k As Generic.KeyValuePair(Of String, String) In e.InitParams
Me.Resources.Add(k.Key, k.Value)
Next
End If
Puis, dans l'un de mes fichiers XAML je peux initialiser le service avec l'URI configuré, je am ODE comme celui-ci
Private Sub InitializeService()
Dim uri As String = App.Current.Resources("ServiceURI")
If uri Is Nothing OrElse uri = String.Empty Then
'if there is no value added in the web.config, I can fallback to default values
_client = New ServiceClient
Else
'Notice I hardcoded the location of the SVC files in the client and append there here, you may choose not to do this
Dim uri_withservice As String = uri & "svc/secure/Service.svc"
_client = New ServiceClient("CustomBinding_Service", New EndpointAddress(uri_withservice))
End If
End Sub
Excellent, avec ces suggestions, j'ai réussi à récupérer mes données WCF ServiceReferences.ClientConfig à dynamiquement modifié au démarrage de l'application, avec l'URI du service de lecture web.config. Ceci est possible en utilisant les "transformations web.config" dans VS2010.
Voici un exemple de web.config.debug, montrant comment le ServiceURI est remplacé quand je choisis "publish" pour mon site web.
<?xml version="1.0"?>
<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<...>
</connectionStrings>
<appSettings>
<add key="ServiceURI" value="http://my.location.com/myService.svc"
xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
</appSettings>
</configuration>
Dans mon web.config de base j'ai alors la même clé/valeur, pointant vers le service local. Pas besoin de se rappeler de changer le ServiceURI chaque fois que je déploie pour tester/production. Génial, ça fait longtemps que je le cherche.
Les solutions présentées ici sont toutes impraticables en ce sens que vous modifiez votre application pour l'adapter à vos paramètres de configuration. Ce blog entry l'a cloué.
J'ai trouvé que c'était la meilleure solution car elle reflète les transformations XML qui peuvent être appliquées au web.config lors du déploiement – Calanus
- 1. Charger l'image non XAP Silverlight
- 2. Obscurcir Silverlight XAP
- 3. Silverlight PRISM charger un module XAP externe
- 4. Charger le fichier dans XAP
- 5. exécution d'un xap (application silverlight) dans VS 2005
- 6. Est-il possible d'afficher/masquer UserControls dans un fichier Silverlight XAP à partir de JavaScript?
- 7. Comment configurer l'en-tête/les lignes dans WPF/Silverlight
- 8. YUI MenuBar placé derrière un contrôle Silverlight ASP.NET
- 9. Comment obtenir le Silverlight XAP copié sur le clientbin sur la construction
- 10. Puis-je configurer un type MIME IIS dans .NET?
- 11. ressources Intégrer (png, jpg, mp3, wmv, etc) dans le fichier silverlight xap et référence de XAML
- 12. Comment charger une image de ressource png dans Silverlight?
- 13. Quel est l'objectif du fichier AppManifest.xaml dans les applications Silverlight?
- 14. UserControl gonfle lorsqu'il est placé sur un formulaire?
- 15. Silverlight dans webpart Sharepoint
- 16. YUI Menu placé derrière div
- 17. Comment configurer Nhibernate dans ASP.Net
- 18. Comment utiliser Silverlight à partir d'ASP.NET?
- 19. Comment configurer PerlSections dans mod_perl2?
- 20. Comment configurer OpenAds dans CakePHP?
- 21. UIElement.ClipToBounds est dans WPF mais pas Silverlight. Comment simuler dans Silverlight?
- 22. Comment configurer une zone de liste déroulante dans Silverlight pour permettre le passage d'éléments?
- 23. Comment puis-je configurer un menu contextuel Clic droit dans Silverlight?
- 24. Comment sécuriser un service Web WCF activé par Silverlight avec SSL?
- 25. Comment configurer le connecteur IBM IMS dans JBoss
- 26. Création d'un objet silverlight 3 dans le code
- 27. Silverlight HtmlPage.PopupWindow est intermittent
- 28. Silverlight MVVM Isolated Storage
- 29. Comment puis-je déterminer si un div est placé en bas?
- 30. Comment détecter les combos ALT dans Silverlight?
Cette solution est la meilleure en ce qui me concerne. Toute autre solution codée en dur ne fonctionne pas pour moi. – helios456