Domanda

Ho un'applicazione web che espone servizi Web utilizzando WCF e wsHttpBindings. E 'possibile avere l'applicazione su macchine e URL diversi. Ciò significa che la posizione servizio WCF sarebbe stato diverso per ciascuno di essi.

Sto costruendo un servizio di Windows che farà riferimento ogni applicazione e eseguire un compito. Ogni attività ha bisogno di chiamare un servizio sul web application. Capisco che le associazioni sono tutti setup nella app.config, ma c'è un modo più semplice per chiamare il servizio in modo dinamico, o come avrei strutturare l'app.config?

<webApplication WebServiceUrl="http://location1.com/LunarChartRestService.svc" />
<webApplication WebServiceUrl="http://location2.com/LunarChartRestService.svc"/>
È stato utile?

Soluzione

file di configurazione del suo cliente potrebbe essere simile a questa:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <client>
      <endpoint name="Endpoint1"
                address="http://location1.com/LunarChartRestService.svc"
                binding="wsHttpBinding"
                contract="(whatever-your-contract-is)" />
      <endpoint name="Endpoint2"
                address="http://location2.com/LunarChartRestService.svc"
                binding="wsHttpBinding"
                contract="(whatever-your-contract-is)" />
      <endpoint name="Endpoint3"
                address="http://location3.com/LunarChartRestService.svc"
                binding="wsHttpBinding"
                contract="(whatever-your-contract-is)" />
    </client>
  </system.serviceModel>
</configuration>

Poi, nel codice, è possibile creare ad esempio un endpoint (proxy client) in base al suo nome, e quindi si può scegliere a seconda di quale posizione si ha bisogno. Non c'è nulla ti impedisce di creare più proxy client, sia! Quindi è possibile connettersi a più endpoint server utilizzando più proxy client, nessun problema.

In alternativa, si può ovviamente creare anche un'istanza di "WsHttpBinding" e "EndpointAddress" nel codice, e impostare le proprietà necessarie (se presente), e poi chiamare il costruttore per il proxy client con questo pronti oggetti realizzati, quindi sovrascrivendo l'intera app.config circo e la creazione di ciò che si sente è necessario:

EndpointAddress epa = 
    new EndpointAddress(new Uri("http://location1.com/LunarChartRestService.svc"));
WSHttpBinding binding = new WSHttpBinding();

Marc

Altri suggerimenti

Dalla tua descrizione, sembra come se tutti i server stanno esponendo lo stesso contratto di servizio. Se è così, si potrebbe benissimo semplicemente dichiarare nella tua web config e scegliere uno in fase di esecuzione in base al nome dell'endpoint.

Naturalmente, è possibile che non si preferisce trattare con quella parte della configurazione di WCF e preferisce semplicemente avere una lista di URL più semplice e da fare con esso. Questo è perfettamente possibile pure; hai solo bisogno di fare un po 'più di lavoro sul lato di codice per istanziare gli oggetti proxy lato client / canale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top