L'errore è abbastanza chiaro - si Stai usando HTTP, hai abilitato HttpGetEnabled sul tuo comportamento di ServiceMetadata, ma non hai fornito un indirizzo di base nella tua configurazione.
In IIS, gli indirizzi di base non sono né necessari né utilizzati, poiché l'ubicazione del file * .svc definisce l'indirizzo del servizio. Quando sei auto-hosting, puoi e dovresti usare gli indirizzi di base.
Cambia la tua config per cercare qualcosa di simile:
<system.serviceModel>
<services>
<service name="YourService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8080/YourService" />
</baseAddresses>
</host>
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
..... (your own other endpoints) ...........
</service>
</services>
</system.serviceModel>
Ora, il "httpGetEnabled" ha un indirizzo di base http://localhost.8080/YourService
per andare per ottenere i metadati da.
Oppure, se non ti piace questo, ancora una volta, il messaggio di errore è abbastanza chiaro sulla vostra alternativa: definire un URL assoluto per il HttpGetUrl nel ServiceMetadata:
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata
httpGetEnabled="true"
httpGetUrl="http://localhost:8282/YourService/mex" />
</behavior>
</serviceBehaviors>
I clienti possono ottenere i metadati da i tuoi endpoint "mex", a un URL fisso definito come in questo secondo esempio, oppure andranno all'indirizzo di base del servizio per i metadati (se ce n'è uno).
Se provieni da IIS e non hai adattato nulla, non avrai né un indirizzo di base né un URL assoluto esplicito per il tuo endpoint di scambio Metadata, ecco perché ottieni l'errore che stai vedendo .
Marc
fonte
2009-11-01 22:06:03
qual è il tuo codice per creare il proxy? – Dani
productsServiceHost = new ServiceHost (typeof (Products.ProductsService)); productsServiceHost.Open(); stop.IsEnabled = true; start.IsEnabled = false; status.Text = "Servizio in esecuzione ..."; – Attilah