2010-03-07 1 views
3

HTTP 및 HTTPS를 통해 액세스 할 수있는 WCF 서비스가 있지만 HTTPS에서 특정 메소드 만 사용할 수 있다고 가정 해 봅시다. 현재 요청이 HTTPS인지 어떻게 확인할 수 있습니까? HttpContext가 비어 있으므로 HttpContext.Current.Request.IsSecureConnection을 체크 할 수 없습니다 - 다른 아이디어? 미리 감사드립니다.WCF 서비스가 HTTP 또는 HTTPS를 통해 호출되는지 여부를 나타내는 방법은 무엇입니까?

답변

5

WCF 응용 프로그램을 ASP.NET이 전혀없는 Windows 서비스로 호스팅 할 수 있다고 가정하십시오.이 경우 "안전"대 "안전하지 않은 것"이 없습니다. 그것이 WCF가이 정보를 사용할 수 있도록 시도하지 않는 한 가지 이유입니다.

하나의 옵션은 ASP.NET Compatibility Mode에서 WCF 서비스를 실행하는 것입니다. 여기에서 을 수행하면HttpContext.Current 인스턴스에 액세스 할 수 있습니다.

그러나 보안 운영을 위해 다른 SSL 전용 서비스를 만드는 것이 좋습니다. 어쨌든이 작업을 원한다고 생각합니다. 따라서 계약은 명시 적입니다. 그렇지 않으면 런타임 검사가 수행되고 클라이언트는 사용하려는 메소드가 허용되지 않는다는 것을 모를 수 있습니다.

웹 서비스의 "우수 사례"는 이러한 유형의 제한을 가능한 한 명시 적으로 지정하고 SSL을 통해서만 사용할 수있는 별도의 서비스를으로 지정하면 서비스 제한 사항을 가장 명확하게 설명하는 입니다.

OperationContext.Current.RequestContext.RequestMessage.Headers.To.Scheme 

포함처럼

0

HTTPS는 HTTP와는 다른 포트를 통해 제공됩니다. 아마 포트를 알고 있다고 가정하면 충분할 것입니다.

+0

그렇다면 사용중인 포트는 어떻게 찾을 수 있습니까? 메타 문제. – Aaronaught

+2

@Aaronaught :'OperationContext.Current.RequestContext.RequestMessage.Headers.To'는 요청을 보낸 uri를 반환해야합니다. –

2

(마 엘렌 의해 답변을 내 @Aaronaught에서 코멘트에 건물 ...)

것 같습니다 "HTTP"또는 "HTTPS를"다른 사람 (msdn)들.

0

방법에 대해 :

이 매우 용이 포트 번호에 의존하지 않고 ( 사이트 시야에 IIS로) 자체 호스트 WCF 서버에서 잘 작동
var iwrc = WebOperationContext.Current.IncomingRequest; 
var isHttps = iwrc.UriTemplateMatch.BaseUri.Scheme.Equals("https", StringComparison.InvariantCultureIgnoreCase); 

.

관련 문제