In sintesi
Come accedere ad un servizio WCF su localhost quando ospitato in IIS su Azure? Azure non associa localhost o 127.0.0.1 al mio sito web.Utilizzo di WCF su Localhost su Azure
dettagli
Ho un'applicazione ASP.Net ospitato su Azure. Ho aggiunto un .svc e alcuni flussi di lavoro che voglio usare tramite WCF. Per mantenere le cose semplici, la mia app web chiama semplicemente il servizio su localhost, quindi ho endpoint come questi in web.config;
<client>
<endpoint address="http://localhost:8080/Router.svc/Case" binding="basicHttpBinding" contract="NewOrbit.ExVerifier.Model.Workflow.Case.ICaseWorkflow" name="Case" />
<endpoint address="http://localhost:8080/Workflow/Case/Case_default1.xamlx" binding="basicHttpBinding" contract="*" name="Case_default1" />
</client>
Questo funziona perfettamente sul mio computer locale. Il problema è che quando lo pubblico su Azure, il sito Web in IIS non ottiene un binding a localhost, invece i binding sono sempre all'indirizzo IP reale del server. Si finisce per guardare come questo in applicationHost.config:
<bindings>
<binding protocol="http" bindingInformation="10.61.90.44:80:" />
<binding protocol="https" bindingInformation="10.61.90.44:443:" />
<binding protocol="http" bindingInformation="10.61.90.44:8081:" />
</bindings>
Così, non appena il mio web app tenta di chiamare il servizio su localhost (127.0.0.1 o per quella materia) non riesce immediatamente. Inutile dire che se rpifico il server e cambio il binding, tutto va bene.
Quello che trovo davvero strano è che ci sono un sacco di esempi là fuori dove le persone stanno accedendo ai servizi WCF su localhost su Azure, quindi non riesco a capire perché sia così. Ho impostato osFamily su 2 e per eseguire il debug di questo ho abilitato la pubblicazione sul Web e l'accesso al desktop remoto che, in teoria, in teoria, potrebbero rovinare tutto.
Quello che ho già guardato
- posso riscrivere l'indirizzo dell'endpoint nel mio codice in fase di esecuzione per sostituire localhost per l'indirizzo effettivo o creare il punto finale in modo dinamico, come descritto da Ron nelle risposte . Sfortunatamente sto usando il servizio di routing WCF così posso gestire i flussi di lavoro della versione. Ciò significa che il mio codice chiama l'endpoint del router e il router WCF a sua volta chiama il servizio/flusso di lavoro effettivo utilizzando un endpoint specificato in web.config. Non ho il controllo sulla risoluzione dell'endpoint dei servizi di routing senza, credo, scrivendo un intero set di logica di routing che sembra essere molto lavoro quando tutto ciò che voglio è chiamare localhost :)
- Passaggio all'utilizzo denominato tubi; Purtroppo, causa alcuni problemi strani con i flussi di lavoro, probabilmente a causa del duplexing, e io sono su una scadenza quindi non ho il tempo di arrivare al fondo di questo al minuto.
chiunque può dire perché questo non è vincolante già disponibili al momento della creazione del ruolo? – BozoJoe