2009-08-25 16 views
14

Sto utilizzando un servizio wcf con la mia applicazione silverlight. La posizione del servizio wcf è indicata nel file ServiceReferences.ClientConfig e deve essere modificata nel percorso in cui è installata l'applicazione.Silverlight: come configurare ServiceReferences.ClientConfig quando inserito all'interno di xap

Tuttavia, questo file è incluso nel file xap e non è qualcosa che può essere facilmente modificato quando l'applicazione viene distribuita. C'è un altro modo di fare riferimento al servizio wcf dall'applicazione silverlight? O come si modifica ServiceReferences.ClientConfig nel file xap?

risposta

8

Ci possono essere modi migliori, che sono aperto a utilizzare, ma questo funziona per me ed è flessibile.

Nell'applicazione Web Web.config, aggiungere una variabile in AppSettings e memorizzare l'URL di base, notare che non sto memorizzando il percorso del file SVC, lo aggiungerò successivamente. Questo perché ho più SVC di solito. Puoi scegliere di farlo in modo diverso.

<appSettings> 
    <add key="ServiceURI" value="http://localhost:64457/"/> 
</appSettings> 

Nella mia pagina Web Web Application, aggiungere un parametro chiamato InitParms, questo consente di aggiungere un elenco di chiave, i valori di coppia (separati da virgola che saranno letti dal file 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") %>" /> 

nel Silverlight App.xaml.vb, caricare tutti i InitParms in una risorsa o dove mai volete

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 

Poi in nessuna delle mie file XAML posso inizializzare il servizio con l'URI configurato, ho am etodo come questo

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

eccellente, con questi suggerimenti, sono riuscito a ottenere i miei dati WCF ServiceReferences.ClientConfig per essere modificati dinamicamente all'avvio dell'applicazione, con l'URI servizio letta da web.config. Questo è possibile usando le "trasformazioni web.config" in VS2010.

Qui un esempio web.config.debug, che mostra come ServiceURI viene sostituito quando scelgo "pubblica" per il mio sito 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> 

Nel mio web.config di base ho poi hanno la stessa chiave/valore, che punta al servizio locale. Non è necessario ricordare di cambiare ServiceURI ogni volta che eseguo la distribuzione per test/produzione. Fantastico, l'ho cercato per un po 'ora.

2

Le soluzioni presentate qui non sono pratiche, nel senso che si modifica l'applicazione per adattarsi alle impostazioni di configurazione. Questo blog entry inchiodato.

+0

Ho trovato che questa sia la soluzione migliore in quanto rispecchia le trasformazioni xml che possono essere applicate a web.config sulla distribuzione – Calanus

Problemi correlati