2013-01-16 18 views
6

Ho aggiunto un riferimento a un servizio WCF con due endpoint. Aggiungendo il servizio seguente vengono aggiunti al file di configurazione:Impossibile trovare l'endpoint con nome e contratto

<client> 
    <endpoint name="ABCServiceV1" address="http://staging.ABCwebservices.com/ABC/Service.svc" 
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV1" 
    contract="ABCService.IService" /> 
    <endpoint name="ABCServiceV2" address="http://staging.ABCwebservices.com/ABC/Service.svc/20" 
    binding="basicHttpBinding" bindingConfiguration="ABCServiceV2" 
    contract="ABCService.IService1" /> 
</client> 

Il codice per creare il cliente è così come di seguito:

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV2"); 

Tuttavia, sto ottenendo un errore di runtime - "Impossibile trovare l'elemento endpoint con il nome 'ABCServiceV2' e il contratto 'ABCService.IService' nella sezione di configurazione del client ServiceModel. Ciò potrebbe essere dovuto al fatto che non è stato trovato alcun file di configurazione per l'applicazione o perché nessun elemento dell'endpoint che corrisponde a questo nome può essere trovato nell'elemento client ".

se ho usato ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1"); quindi tutto funziona correttamente. Ma quando si usa ABCServiceV2 si cerca di cercare Contract - ABCService.IService - quando dovrebbe cercare - ABCService.IService1.

Come faccio a cercare il contratto corretto?

+0

L'indirizzo della ABCServiceV2 ha un '20' aggiunto alla fine ... non sono sicuro se questo abbia a che fare con esso o no. Solo un'osservazione – user959729

+0

Penso che dovrebbe andare bene dato che il '20' è necessario per rendere l'endpoint diverso. Entrambi gli endpoint del servizio funzionano bene su uno strumento come SoapUI. Quindi il problema è da qualche parte nel codice client. – ipoh

risposta

3

Se è stato aggiunto un secondo riferimento a un servizio diverso (ABCServiceV2), credo che questo avrà generato una seconda classe di servizio per ABCServiceV2. Le due classi implementeranno contratti separati (ABCService.IService e ABCService.IService1) in modo da non essere in grado di interscambiare gli endpoint.

Credo che si dovrebbe essere in grado di inizializzare i tuoi due endpoint del servizio in questo modo:

ABCService.ServiceClient ABCClient = new ServiceClient("ABCServiceV1"); 
ABCService.Service1Client ABCClient1 = new Service1Client("ABCServiceV2"); 
+1

Grazie .. il problema era che stavo usando ServiceClient invece di Service1Client. Il seguente codice funziona senza problemi: ABCService.Service1Client ABCClient1 = new Service1Client ("ABCServiceV2"); – ipoh

1

Anche se questo post è vecchio e ha risposto, la risposta non ha aiutato nel mio caso. Il mio problema è che ho generato il client di servizio con lo strumento svcutil.exe, ma non ho specificato alcuno spazio dei nomi; e così il nome dello spazio dei nomi del contratto è stato generato come spazio dei nomi di destinazione del documento dello schema per impostazione predefinita, sì pasticcio totale.

D'altro canto, stavo cercando di utilizzare il file di configurazione generato quando un riferimento al servizio viene aggiunto al progetto. Lo spazio dei nomi del contratto in questo file è ServiceReference1 (per impostazione predefinita) o qualsiasi altro nome che si desidera, tempesta perfetta! Ma tutto ciò che dovevo fare era rimuovere la parte namespace dal FQN dall'attributo del contratto <endpoint> e il contratto divenne visibile al CLR.

Sperare questo aiuto altri