14

I have a wcf service thats exposing a service using two endpoints. One endpoint is used for web service calls while the other is using rest.

Is there a way to determine from which endpoint the server functions are being called?

Marcom
  • 4,621
  • 8
  • 54
  • 78
  • 1
    one problem im encountering is that soap and rest handle erros differently. To report an error in rest you need to send a bad request as a response, and this causes an unhanded exception in soap. – Marcom Feb 08 '11 at 15:17

2 Answers2

15

Actually, contrary to what I thought - it's actually pretty easy to find out what endpoint the service was called on. In your service method, add these lines of code:

OperationContext oc = OperationContext.Current;

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

But as I said : I would use this very wisely and "defensively" - don't start changing service behavior based on what endpoint your method was called on - that would be very bad design!

I tried this with several SOAP endpoints - not 100% sure how REST will be handled (but most likely the same or very similarly) - try it out!

But for logging, this should work just fine!

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
2

Lifted from the blog entry here:

You just need to look at the LocalAddress on the Channel of the current Operation Context in the method:

OperationContext.Current.Channel.LocalAddress
Matt Davis
  • 45,297
  • 16
  • 93
  • 124