2010-08-28 12 views
21

Ehi, come si fa a ottenere l'indirizzo IP della persona che una richiesta in qualcosa di simile al seguente:WCF 4 Rest Ottenere l'IP di richiesta?

[ServiceContract]  
    [AspNetCompatibilityRequirements(RequirementsMode = 
    AspNetCompatibilityRequirementsMode.Required)]  
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]   
    public partial class UsersService 
    {       
     [WebInvoke(UriTemplate = "", Method = "PUT")]   
     public User AddNewUser(User newUser) 
     {    
      // code goes here including GETTING AN IP?? 
     } 

Grazie!

risposta

38

uso interno AddNewUser seguente frammento di codice:

OperationContext context = OperationContext.Current; 
MessageProperties messageProperties = context.IncomingMessageProperties; 
RemoteEndpointMessageProperty endpointProperty = 
    messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; 

esempio RemoteEndpointMessageProperty offre proprietà Indirizzo e Porta.

+1

Il problema è che, a meno che qualcosa non sia cambiato in .Net 4, è un vero problema procurarsi OperationContext quando si utilizza WebHttpBinding. Sono stato in grado di farlo creando un MessageInspector, ma è necessario uscire un po 'dal salto del telaio. –

+0

Non sono sicuro di cosa intendi con questo. OperationContext deve essere disponibile in qualsiasi chiamata WCF anche se è esposto al servizio REST su WebHttpBinding. L'ho provato in WCF 4 e funziona. –

+0

In .Net 3.5 con WebHttpBinding è possibile accedere a WebOperationContext, ma OperationContext non era disponibile direttamente. Sono felice di sapere che l'hanno risolto in 4.0. –

Problemi correlati