문제

순수한 WCF 컨텍스트에서 몇 가지 편안한 서비스가 실행됩니다 (예 : ASP.NET 호환성이 활성화되지 않으므로 HttpContext.Current 사용 가능한 객체).

서비스에 대한 URL은 IHttpModule (그 시점에서 HttpContext 그리고 그것을 사용하여 다시 작성합니다 HttpContext.Current.RewritePath)와 같은 것들을 제거합니다 .svc URL에서 확장.

그러나 WCF 인프라 내에서 요청 된 원래 URL에 액세스해야합니다. 동등한 것이 있습니까? HttpContext.Current.Request.RawUrlOperationContext 또는 WebOperationContext 어디서나 수업? 사용 WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri 원래 URL이 아닌 다시 작성된 URL을 반환합니다.

도움이 되었습니까?

해결책

현재 타겟팅 된 엔드 포인트와 URI를 수행 할 수 있습니다.

OperationContext.Current.RequestContext.RequestMessage.Headers.To

내가 생각하는 것은 다음과 같은 것입니다.

OperationContext.Current.IncomingMessageHeaders.To

이것은 System.Uri 물체, 그리고 나는 당신이 그냥 얻을 수 있다고 믿습니다. OriginalString 또는 PathAndQuery, 또는 원하는 부분.

다른 팁

다음과 같은 것을 시도하십시오.

OperationContext.Current.Channel.LocalAddress.Uri.AbsoluteUri

나는 그것을 사용하는 것을 발견했다

OperationContext.Current.RequestContext.RequestMessage.Headers.To

공장 대부분 당시, 그러나 내 신청서는 아니 었습니다. NLB (네트워크로드 밸런서) 뒤에있어 원래 입력 호스트 이름을 잃게됩니다. 하지만 입력 호스트는 여전히 "호스트"라는 헤더에 있으며 놀랍게도 어려웠습니다. 다음에 있습니다.

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

(헤더 개체 System.ServicEmodel.OperationContext.Current.incomingMessageHeaders 클라이언트의 모든 헤더를 진정으로 가지고 있지는 않았습니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top