2009-08-25 5 views
14

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

8

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 
7

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.

2

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é.

+0

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

Questions connexes