2011-02-08 9 views
13

Ho un servizio wcf che espone un servizio utilizzando due endpoint. Un endpoint viene utilizzato per le chiamate al servizio Web mentre l'altro sta utilizzando il resto.Determina quale endpoint wcf viene utilizzato sul server

C'è un modo per determinare da quale endpoint vengono chiamate le funzioni del server?

+0

un problema Sto incontrando è che il sapone e il riposo gestiscono gli errori in modo diverso. Per segnalare un errore a riposo è necessario inviare una richiesta non valida come risposta e ciò provoca un'eccezione non gestita in soap. – Marcom

risposta

15

In realtà, contrariamente a quello che pensavo, in realtà è abbastanza semplice scoprire quale endpoint è stato chiamato il servizio. Nel vostro metodo di servizio, aggiungere queste righe di codice:

OperationContext oc = OperationContext.Current; 

if(oc != null) 
{ 
    string wasCalledOn = oc.EndpointDispatcher.EndpointAddress.Uri.ToString(); 
} 

Ma come ho detto: vorrei utilizzare questo molto saggiamente e "difensiva" - non iniziare a cambiare il comportamento di servizio sulla base di ciò endpoint vostro metodo è stato chiamato - Sarebbe un pessimo design!

Ho provato questo con diversi endpoint SOAP - non sicuro al 100% come verrà gestito REST (ma molto probabilmente lo stesso o molto similmente) - provalo!

Ma per la registrazione, questo dovrebbe funzionare bene!

+0

Invece di '.ToString()' Sto usando '.Segments.Last()'. – ricksmt

1

sollevato dalla voce del blog here:

Hai solo bisogno di guardare il LocalAddress sul Canale del Contesto corrente Operazione nel metodo :

OperationContext.Current.Channel.LocalAddress