Domanda

Ho un servizio Web WCF a cui fa riferimento una libreria di classi.Dopo l'esecuzione del progetto, durante la creazione dell'oggetto client del servizio dall'interno di una libreria di classi, ricevo un'eccezione InvalidOperationException con il messaggio:

Impossibile trovare l'elemento endpoint predefinito che riferisce il contratto "myservicereference.imyservice" nella sezione Configurazione client ServiceModel.Ciò potrebbe essere dovuto al fatto che non è stato trovato alcun file di configurazione per l'applicazione o perché non è stato possibile trovare alcun elemento endpoint che corrisponde a questo contratto nell'elemento client.

Il codice che sto utilizzando per creare l'istanza è:

myServiceClient = new MyServiceClient();

da cui MyServiceClient eredita

System.ServiceModel.ClientBase

Come lo risolvo?

Nota:Ho un'applicazione console separata che crea semplicemente lo stesso oggetto di servizio ed effettua chiamate ad esso e funziona senza problemi.

È stato utile?

Soluzione

Ecco il mio file app.config della libreria di classi:

Dovresti inserire queste impostazioni di configurazione nel file di configurazione dell'app principale.L'applicazione .NET (che chiama la libreria di classi) utilizza i dati dal proprio file di configurazione non dal file di configurazione della libreria.

Altri suggerimenti

Oppure puoi impostare l'endpoint nel tuo codice:

http://msdn.microsoft.com/en-us/library/ms731862.aspx

BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress address = new EndpointAddress("http://url-to-service/");

// Create a client that is configured with this address and binding.
MyServiceClient client = new MyServiceClient(binding, address);

Ho avuto un caso simile.Avevo una libreria di classi che chiamava un servizio web, poi avevo un .EXE che chiamava .DLL della libreria di classi.Penso che venga utilizzato il file di configurazione .EXE e non quello della configurazione .DLL.

Ma come ha detto sopra Richard, ho dovuto qualificare completamente lo spazio dei nomi.È un po' una seccatura.Di seguito è esattamente ciò che ho cambiato.Il dolore è che ho dovuto cambiarlo in due posti, uno in riferimento.cs che viene generato quando si crea un riferimento di servizio e l'altro nel file di configurazione.Pertanto, ogni volta che cambio il servizio Web ed eseguo un "Riferimento aggiornamento", devo apportare nuovamente la modifica al codice C#.

1) È necessario effettivamente modificare il ConfigurationName nel reference.cs come segue:

Da: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = " RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

A: [System.ServiceModel.ServiceContractAttribute(Namespace = "http://TFBIC.RCT.BizTalk.Orchestrations", ConfigurationName = "TFBIC.RCT.HIP.Components.RCTWebService.WcfService_TFBIC_RCT_BizTalk_Orchestrations")]

2) e quindi modificare anche il valore "contratto" in tutti i file app.config correlati (per .dll e .exe) come segue:

Da:

<indirizzo endpoint=http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svcbinding = "wshttpbinding" bindingConfiguration = "wshttpbinding_itwowayasync" contratto = "rctwebservice.wcfservice_tfbic_rct_biztalk_orchestrations" name = "wshttpbinding_itwowayasync">

A:

<indirizzo endpoint=http://nxwtest08bt1.dev.txfb-ins.com/TFBIC.RCT.BizTalk.Orchestrations/WcfService_TFBIC_RCT_BizTalk_Orchestrations.svcbinding = "wshttpbinding" bindingConfiguration = "wshttpbinding_itwowayasync" contratto = "tfbic.rct.hip.components.rctwebservice.wcfservice_tfbic_rct_bizTalk_orchestrations" name = "wshtttpinding_itwowayasync">

Giusto per essere chiari: come facevo a sapere quale fosse lo spazio dei nomi completo?Lo spazio dei nomi del programma era TFBIC.RCT.HIP.All'interno di ciò, il codice C# ha un'istruzione Spazio Names aggiuntivo:

namespace RCTHipComponents

Probabilmente sarebbe d'aiuto se pubblicassi il tuo file app.config, poiché questo tipo di errore tende a indicare un problema nel file <endpoint> bloccare.Assicurati che l'attributo del contratto ti sembri corretto.

Modificare:Prova a qualificare pienamente il valore del tuo contratto;utilizzare lo spazio dei nomi completo.Penso che sia necessario.

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