2011-09-29 12 views
10

C'è un modo per creare un'istanza di un client di servizio WCF in C# con un indirizzo endpoint specificato senza specificare un nome di configurazione?Crea client di servizio WCF con indirizzo specificato senza specificare il nome di configurazione

Per impostazione predefinita, i clienti dispongono di questi costruttori:

public ServiceClient() 
    public ServiceClient(string endpointConfigurationName) 
    public ServiceClient(string endpointConfigurationName, string remoteAddress) 

Ovviamente, c'è una configurazione di default, a causa del primo costruttore. Quello che voglio è specificare solo il 2 ° parametro del costruttore finale. In questo momento, sto lottando attraverso la lettura degli elementi di configurazione dell'utilizzo di ConfigurationManager per capirlo, ma sembra orribilmente ingombrante. C'è un modo più pulito?

risposta

1

Bene, è possibile utilizzare il costruttore predefinito, ma in tal caso si dovrebbe programmare manualmente in tutte le impostazioni di configurazione. Specificando il nome della configurazione, il client del servizio caricherà automaticamente la configurazione dal file .config, tutto ciò che è necessario sapere è quale configurazione usare (si può avere più, ad esempio una per HTTP e un'altra per Net.Tcp). Il RemoteAddress, ovviamente, dice semplicemente a WCF dove effettuare la connessione.

Se si verificano problemi durante la configurazione delle impostazioni client, assicurarsi di utilizzare lo strumento Configurazione servizio WCF. Funziona sia per la configurazione del servizio che per la configurazione del client.

6

vostro client generato dovrebbe anche avere un costruttore che assomiglia a questo:

public ServiceClient(
    System.ServiceModel.Channels.Binding binding, 
    System.ServiceModel.EndpointAddress remoteAddress) 
     : base(binding, remoteAddress) { 
    } 

È possibile chiamare questo uno senza una configurazione endpoint.

8

Preferisco non utilizzare la configurazione del nodo finale nel file .config. Faccio di solito qualcosa di simile:

 BasicHttpBinding basicbinding = new BasicHttpBinding(); 
     basicbinding.SendTimeout = TIMEOUT; 
     basicbinding.OpenTimeout = TIMEOUT; 
     ServiceClient client = new ServiceClient(basicbinding, new EndpointAddress(new Uri("http://xxxxx"))); 
+2

La classe EndpointAddress ha un costruttore che accetta subito una stringa uri. Non c'è bisogno di aggiungere "nuovo Uri" lì dentro. – Nyerguds

3

Se si vuole in realtà vuole solo chiamare un servizio senza dover conoscere tutto quello che c'è da sapere su servizi WCF e la gestione della configurazione, in C# si può solo fare .. .

 String url = "http:\\somehost:someport\\pathToSomeService"; 

     EndpointAddress address = new EndpointAddress(url); 
     Binding binding = new BasicHttpBinding(); 

     YourClient client = new YourClient(binding, address); 

     // Call your client methods 
     client.SomeMethod(parm1, parm2); 

È possibile che questo assume si è generato un riferimento al servizio e non richiede le informazioni di configurazione di esistere da nessuna parte, non in riferimento al servizio generato, non nella DLL e non nel file eseguibile. Nessuna configurazione Nessuna.

Io uso quanto sopra in una vera dll proxy di servizio standalone. È autonomo nel vero senso della parola in quanto è completamente configurabile senza dipendere dall'eseguibile chiamante per fornire qualsiasi cosa.

+0

Questo presuppone l'associazione http di base, che non ho potuto assumere. Ho finito per leggere manualmente la sezione del client del servizio dal file di configurazione e creare a livello di codice l'associazione. – recursive

Problemi correlati