wcf url-rewriting httpcontext operationcontext weboperationcontext

¿Cuál es el equivalente de WCF de HttpContext.Current.Request.RawUrl?



url-rewriting operationcontext (3)

He encontrado que usando

OperationContext.Current.RequestContext.RequestMessage.Headers.To

funciona la mayor parte del tiempo, pero no para mi aplicación. Está detrás de un NLB (Network Load Balancer), lo que hace que pierda el nombre de host de entrada original. Pero el host de entrada todavía está en un encabezado llamado "Host", que fue sorprendentemente difícil de conseguir. Está localizado en:

System.ServiceModel.Web.WebOperationContext.Current.IncomingRequest.Headers["Host"]

(los objetos de encabezado en System.ServiceModel.OperationContext.Current.IncomingMessageHeaders realmente no tenían todos los encabezados del cliente)

Tengo algunos servicios RESTful ejecutándose en un contexto puro de WCF (es decir, la compatibilidad con ASP.NET no está habilitada, y por lo tanto no hay ningún objeto HttpContext.Current disponible).

Las URL de los servicios se reescriben al inicio de la solicitud utilizando un IHttpModule (que en ese momento tiene un HttpContext y lo reescribe utilizando HttpContext.Current.RewritePath ) para deshacerse de cosas como la extensión .svc de la URL.

Sin embargo, necesito acceder a la URL original que se solicitó desde la infraestructura de WCF. ¿Existe un equivalente a HttpContext.Current.Request.RawUrl en las clases OperationContext o WebOperationContext cualquier lugar? Utilizando WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri devuelve la URL reescrita, no la original.


Puede obtener el punto final actualmente objetivo y el Uri para hacerlo haciendo:

OperationContext.Current.RequestContext.RequestMessage.Headers.To

que creo que es lo mismo que:

OperationContext.Current.IncomingMessageHeaders.To

Este es un objeto System.Uri , y creo que puedes obtener OriginalString o PathAndQuery , o las partes que quieras de él.


intente algo como esto:

OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri