L’host del servizio WCF non è in grado di trovare alcun metadata del servizio

Sto solo imparando WCF e attualmente sono arrivato così lontano.

File CS:

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; namespace wcfLib { [ServiceContract] public interface IfaceService { [OperationContract] int wordLen(string word); } public class StockService : IfaceService { public int wordLen(string word) { return word.Length; } } } 

Tuttavia, quando sto cercando di eseguirlo, viene visualizzato un errore:

L’host del servizio WCF non riesce a trovare alcun metadata del servizio …

Qualche idea di cosa potrebbe essere?

File di configurazione:

                          

Devi avere il seguente nel tuo file di configurazione:

1) un comportamento di servizio per i metadati:

        

2) fare riferimento al comportamento del servizio nella configurazione del servizio

  ....  

* Il valore del nome nei tag del servizio nel file di configurazione deve avere lo stesso nome della class fisica che sta implementando il contratto. Ricorda se il nome della class cambia, assicurati di cambiare questo valore per farlo corrispondere.

3) un endpoint per MEX (scambio di metadati)

  ....   

Con tutto questo a posto, le cose dovrebbero andare bene! 🙂

Ho ottenuto lo stesso identico problema ed ero vigorosamente passato alla mia configurazione e tutto era in linea con gli endpoint dei metadati, ecc. Il problema? Questa linea:

  

Il valore del name DEVE, DEVE avere il nome della class fisica che sta implementando il contratto. Ho dimenticato … ancora una volta e arbitrariamente chiamato pensando che potrebbe essere una stringa qualsiasi. Quindi nel caso sopra la class di implementazione deve essere denominata Service1 . Se il nome della class cambia, assicurati di cambiare questo valore.

Questo è come roba di WCF 101 e mi viene comunque bruciato anche se eseguo WCF da CTP in Framework 3.0. Blah …

Il modo più semplice per creare questo problema è semplicemente ridimensionare il nome dell’interfaccia. Certamente cambia il nome dell’istanza nel tuo progetto ma non riesce ad aggiornare il file web.config. Per ricreare creare un nuovo servizio, rinominare la tua interfaccia e whack F5, compare la finestra di dialogo dei metadati 🙂 La risposta è come sopra, ricorda solo di modificare manualmente il tuo file web.config.

Saluti

Ho triggersto l’triggerszione HTTP. Assicurati di averlo acceso.

Assicurati che l'attivazione HTTP sia attiva

Sembra che tu debba aggiungere un endpoint per lo scambio di metadati:

http://en.csharp-online.net/WCF_Essentials%E2%80%94Metadata_Exchange

Per impostazione predefinita, Visual Studio proverà a configurare un ui client / test per farti giocare con il tuo nuovo servizio. Per fare ciò, è necessario essere consapevoli della struttura e dei metodi offerti dal servizio. Ciò si ottiene consumando una definizione nel formato WSDL standard. Tuttavia, WCF non pubblicherà questi dati per impostazione predefinita.

È necessario impostare un comportamento dell’endpoint metadataexchange su acehive.

Inserisci qui il tuo file di configurazione e noi possiamo aiutarti, o google / stack cercare metadataexchange e wsdl in WCF

Ho ricevuto questo errore perché il mio nome di servizio era sbagliato. Utilizzando netTcpBinding e mexTcpBinding con httpGetEnabled = False ha funzionato.

 // get the  /  config section ServicesSection services = ConfigurationManager.GetSection("system.serviceModel/services") as ServicesSection; ServiceHost host = new ServiceHost(typeof(SelfHostedService.Service)); // enumerate over each  node foreach (ServiceElement aService in services.Services) { Console.WriteLine(); Console.WriteLine("Name: {0} / Behavior: {1}", aService.Name, aService.BehaviorConfiguration); // enumerate over all endpoints for that service foreach (ServiceEndpointElement see in aService.Endpoints) { Console.WriteLine("\tEndpoint: Address = {0} / Binding = {1} / Contract = {2}", see.Address, see.Binding, see.Contract); //host.AddServiceEndpoint( } } try { Console.WriteLine("Service EndPoints are: "); foreach (ServiceEndpoint endpoint in host.Description.Endpoints) { Console.WriteLine("{0} ({1})", endpoint.Address.ToString(), endpoint.Binding.Name); } host.Open(); Console.WriteLine(string.Concat("Service is host at ", DateTime.Now.ToString())); Console.WriteLine("\n Self Host is running... Press  key to stop"); } catch(Exception ex) { Console.WriteLine(ex.Message.ToString()); } 

Se ancora non funziona, elimina il file di configurazione corrente e reCrealo con il suo nome predefinito App.config, funziona.

È inoltre ansible ottenere lo stesso errore se si sta creando l’host di servizio in modo programmatico e si dimentica di aggiungere gli attributi [ServiceContract] e [OperationContract] al contratto di interfaccia.

So che questa è una vecchia domanda, ma ho pensato di dare i miei 2 centesimi sull’argomento da quando è successo a me.

In qualche modo ho modificato la mia piattaforma di sviluppo da “Qualsiasi CPU” a “x86” per il servizio web stesso. Il secondo che ho cambiato in “Any CPU”, ha risolto il problema.