Acabo de empezar a utilizar WCF Services con ASP.NET AJAX. Instanciando mi servicio WCF desde Javascript y luego paso las variables de cadena como argumentos a mi método de Servicio WCF (con una firma OperationContract). A continuación, devuelvo un objeto .NET (definido con un DataContract) que está vinculado a mi clase Javascript personalizada. Tengo problemas para autenticar en función del usuario que inició sesión en mi sesión web. Sin embargo, el servicio web WCF es un servicio completamente diferente sin contexto para el objeto HttpContext.Current. ¿Cuál es la forma más segura de acceder a ese objeto?access HttpContext.Current from WCF Web Service
Respuesta
puede obtener acceso a HttpContext.Current
permitiendo AspNetCompatibility, preferiblemente a través de configuración:
<configuration>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
</configuration>
Eso, a su vez, le permite acceder al usuario actual: HttpContext.Current.User
, que es lo que busca, ¿no?
Usted puede incluso hacer cumplir AspNetCompatibility por la decoración de su clase de servicio con un atributo adicional: (. En el System.ServiceModel.Activation
espacio de nombres)
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
Si ese atributo está en su lugar, su servicio no podrá iniciarse a menos AspNetCompatibility es habilitado!
Usted no tiene un HttpContext por defecto, pero que tienen muchos de los mismos objetos presentes en la OperationContext (que siempre está presente) o el WebOperationContext (que sólo está disponible para ciertos enlaces.
Puede acceder a la OperationContext o WebOperationContext mediante el uso de la propiedad estática .Current
así: WebOperationContext.Current
+1 Esta debe ser la respuesta aceptada. Estamos tratando con WCF que podría estar alojado en un servicio de Windows o autohospedado. AspNetCompatilibity es solo un viejo hábito. – Askolein
En caso de que no quieren cambiar Web.config o no puede cambiarlo:
private string GetClientIPAddress()
{
var props = OperationContext.Current.IncomingMessageProperties;
var endpointProperty = props[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
if (endpointProperty != null)
{
if (endpointProperty.Address == "::1" || String.IsNullOrEmpty(endpointProperty.Address))
return "127.0.0.1";
return endpointProperty.Address;
}
return String.Empty;
}
- 1. wcf json web service
- 2. WCF Web Service Client utilizando un CookieContainer
- 3. Conversión de ASMX a WCF Web Service
- 4. WCF Service vs ASP.NET Web Api
- 5. Uso de Ninject WCF Extension con WCF Web Service
- 6. WCF Service vs Windows Service
- 7. Access Session Variable from HTTPModule
- 8. WCF Service netTCPbinding
- 9. WCF Service authorization patterns
- 10. Access cakephp session (auth) from outside cakephp
- 11. WCF Tracing From Code
- 12. Web Service wrapper
- 13. WCF Service Client Lifetime
- 14. WCF Service Throttling
- 15. WCF Service and Threading
- 16. WCF Service Throttling
- 17. WCF Service in Separate Assembly
- 18. Compartiendo Enum con WCF Service
- 19. diferencia entre WCF Services y Web Services y REST Service
- 20. Servicio WCF en lugar de ASMX Web Service?
- 21. WCF Web Service Error de excepción personalizado al cliente
- 22. WCF Service Backwards Compatibility Check
- 23. Diferencia entre WCF Service, WCF RIA Services y WCF Data Service
- 24. HttpContext.Current es nulo en mi servicio web
- 25. WCF Contracts from Entity Framework?
- 26. WCF service maxReceivedMessageSize basicHttpBinding issue
- 27. WCF net.msmq service auto activation
- 28. WCF REST Push Stream Service
- 29. WCF service under https environment
- 30. Exponer IQueryable Over WCF Service
Gracias por la entrada. Te di un punto. Marcaré mi respuesta una vez que haya probado esto. Estamos almacenando al usuario de forma ligeramente diferente en nuestra aplicación, por lo que tendremos que rediseñar las cosas como lo recomiendan para la autenticación de formularios. Entonces puedo usar este enfoque. – MacGyver
Vale la pena señalar que esto solo funciona si su servicio está alojado en IIS. –