2011-02-08 13 views
13

Tengo un servicio wcf que expone un servicio utilizando dos puntos finales. Un punto final se usa para llamadas al servicio web mientras que el otro usa el resto.Determine qué punto final wcf se está utilizando en el servidor

¿Hay alguna manera de determinar desde qué punto final se están llamando las funciones del servidor?

+0

un problema Me encuentro con que el jabón y el resto manejan los errores de forma diferente. Para informar un error en reposo, debe enviar una mala solicitud como respuesta, y esto causa una excepción sin manos en soap. – Marcom

Respuesta

15

En realidad, al contrario de lo que pensaba, en realidad es bastante fácil averiguar en qué punto final se recurrió al servicio. En el método de servicio, añadir estas líneas de código:

OperationContext oc = OperationContext.Current; 

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

Pero como ya he dicho: Me gustaría utilizar esta misma prudencia y "defensiva" - no empiece a cambiar el comportamiento de servicio en base a lo que el punto final de su método fue llamado - ¡sería un diseño muy malo!

Intenté esto con varios puntos finales SOAP: no estoy 100% seguro de cómo se manejará el REST (pero muy probablemente el mismo o muy parecido), ¡pruébelo!

¡Pero para el registro, esto debería funcionar bien!

+0

En lugar de '.ToString()' He estado usando '.Segments.Last()'. – ricksmt

1

levantado de la entrada de blog here:

Sólo tiene que mirar el LocalAddress en el Canal de la Contexto Corriente de la operación en el método :

OperationContext.Current.Channel.LocalAddress 
Cuestiones relacionadas