Tengo un servicio WCF que se ejecuta en IIS que llama a una función en una biblioteca de clase donde httpContext está disponible. ¿Cómo puedo obtener dinámicamente la URL del sitio web, esto también puede ser un directorio virtual?WCF Service, ¿cómo obtener la URL del sitio web desde una biblioteca de clase?
Respuesta
Puede crear un ServiceHostFactory que inicia su host de servicio de forma manual, luego almacena la dirección de punto final en una clase estática para ser utilizada por su aplicación. Aquí está un ejemplo sencillo:
(en su myService.svc):
<%
@ServiceHost
Service="MyNamespace.MyService"
Factory="MyNamespace.MyServiceHostFactory"
%>
(en sus MyServiceHostFactory.cs):
/// <summary>
/// Extends ServiceHostFactory to allow ServiceHostFactory to be used.
/// </summary>
public class MyServiceHostFactory : ServiceHostFactory
{
/// <summary>
/// Creates a new ServiceHost using the specified service and base addresses.
/// </summary>
/// <param name="serviceType"></param>
/// <param name="baseAddresses"></param>
/// <returns></returns>
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
ServiceHost host;
host = new ServiceHost(serviceType, baseAddresses);
MyGlobalStaticClass.Address = baseAddresses[0]; // assuming you want the first endpoint address.
return host;
}
(En sus MyGlobalStaticClass.cs):
public static string Address = "";
No estoy demasiado caliente en WCF ya que estoy más acostumbrado a .Net 2.0, pero ¿esto lo haría?
HttpContext.Current.Request.Url.ToString()
Debería darle la url de la solicitud de llamada. El problema aquí es que posiblemente podría tener múltiples dominios o directorios virtuales apuntando al mismo servicio y solo le dará la url especificada por el cliente. Sin embargo, si tiene múltiples puntos de entrada, de todos modos no hay una url "uno".
Esto también supone que el enlace WCF es basicHttpBinding o un tipo de enlace HTTP (por ejemplo, netTcpBinding no tiene un HttpContext). – Russell
Voy a empezar asumiendo que estás usando HTTP - estoy seguro de que puedes ajustar el enfoque según en lo que dictan tus condiciones específicas Traté de obtener una respuesta usando HttpContext y descubrí que el valor era nulo cuando funcionaba con Cassini, así que probé un enfoque alternativo.
System.ServiceModel.OperationContext contiene el contexto de solicitud adecuado. Puede seguir la solicitud hasta el mensaje de solicitud real y borrar el encabezado.
Uri requestUri = System.ServiceModel.OperationContext.Current.RequestContext.RequestMessage.Headers.To;
Actualmente estoy trabajando en WCF REST Service y tengo el mismo tipo de requisito. Necesito el servicio Host URL en mi único método. A continuación se detallan las diferentes formas de obtener WCF REST Service Host/URL en la biblioteca de clases.
Puede usar la clase WebOperationContext
que está disponible en el espacio de nombres System.ServiceModel.Web
para obtener la URL del servicio. Tenga en cuenta que esta clase es solo para WCF REST Service.
WebOperationContext.Current.IncomingRequest.Headers["host"]
- Da servicio nombre de hostWebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri.Host
- da servicio nombre de hostWebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri.AbsoluteUri
- Da Full Service UrlWebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri.AbsoluteUri
- Da Full Service Url
Puede obtener más información acerca de la clase de WebOperationContext
MSDN
Para mí, UriTemplateMatch siempre es nulo, así que no puedo usar 3/4 de estas sugerencias. –
- 1. ¿Obtener la URL del sitio web desde Application_Start?
- 2. wcf json web service
- 3. obtener miniaturas de un sitio web desde sus direcciones URL
- 4. Cómo obtener la URL base de un sitio web externo
- 5. access HttpContext.Current from WCF Web Service
- 6. Obtener la raíz del sitio web de NSString o NSUrl
- 7. ¿Cómo devolver Json desde WCF Service?
- 8. Obtener datos del sitio web
- 9. obtener valor de la etiqueta del cuerpo del sitio web
- 10. ASP - Cómo obtener la URL del sitio de referencia
- 11. ¿Cómo obtener favicon.ico desde un sitio web usando Java?
- 12. ¿Cómo obtener la URL del sitio web de alojamiento en la aplicación Silverlight?
- 13. ¿Alguna forma de agarrar un ícono de logotipo desde la URL del sitio web, programáticamente?
- 14. Conversión de ASMX a WCF Web Service
- 15. WCF Service vs Windows Service
- 16. Uso de Ninject WCF Extension con WCF Web Service
- 17. WCF Web Service Client utilizando un CookieContainer
- 18. Cómo obtener el título del sitio web de C#
- 19. WCF Service authorization patterns
- 20. WCF Service vs ASP.NET Web Api
- 21. WCF Web Service Error de excepción personalizado al cliente
- 22. Cómo usar la cookie de autenticación desde WCF Authentication Service en una aplicación ASP.Net MVC
- 23. Compartiendo Enum con WCF Service
- 24. obteniendo la URL base de la raíz del sitio web (URL absoluta/relativa)
- 25. Web Service wrapper
- 26. ¿Cómo obtener la ruta física del sitio web en el servidor IIS local? (desde una aplicación de escritorio)
- 27. ¿Cómo obtener una URL larga desde una URL corta?
- 28. ¿Cómo recupero una URL de un sitio web usando Java?
- 29. ¿Cómo obtener una cadena json desde url?
- 30. Obtener la URL principal del sitio completo en Kohana 3
la dirección URL del servicio WCF o la dirección URL del sitio que es la fuente de la HttpContext? – Russell
URL para el sitio que aloja el servicio WCF ...por ejemplo: http: // localhost/virtualDirectory de http: //localhost/virtualDirectory/myService.svc –
¿Qué versión de IIS? IIS 6 o 7 o 7.5? ¿Está implementado WAS? –