Share via


부분 신뢰 기능 호환성

WCF(Windows Communication Foundation)는 부분 신뢰 환경에서 실행되는 경우 기능의 제한된 하위 집합을 지원합니다. 부분 신뢰에서 지원되는 기능은 지원되는 배포 시나리오 항목에서 설명한 대로 특정 시나리오 집합을 바탕으로 설계되었습니다.

최소 권한 요구 사항

WCF는 다음과 같은 표준 명명된 권한 집합 중 하나에서 실행되는 응용 프로그램의 기능 하위 집합을 지원합니다.

  • 보통 신뢰 권한
  • 인터넷 영역 권한

제한적인 권한을 사용하여 부분 신뢰 응용 프로그램에서 WCF를 사용하려고 할 경우 런타임에 보안 예외가 발생할 수 있습니다.

계약

부분 신뢰에서 계약을 실행할 때 다음과 같은 제한 사항이 적용됩니다.

  • [ServiceContract] 인터페이스를 구현하는 서비스 클래스가 public이어야 하며 public 생성자를 포함해야 합니다. 서비스 클래스가 [OperationContract] 메서드를 정의하는 경우 이 메서드는 public이어야 합니다. 서비스 클래스가 [ServiceContract] 인터페이스를 구현하는 경우에는 [ServiceContract] 인터페이스가 public일 때 이러한 메서드 구현이 명시적 또는 private일 수 있습니다.
  • [ServiceKnownType] 특성을 사용할 때는 지정된 메서드가 public이어야 합니다.
  • [MessageContract] 클래스와 해당 멤버는 public이어야 합니다. [MessageContract] 클래스는 응용 프로그램 어셈블리에 정의되어 있는 경우 internal일 수 있으며 internal 멤버를 포함할 수 있습니다.

시스템 제공 바인딩

BasicHttpBindingWebHttpBinding은 부분 신뢰 환경에서 완전히 지원됩니다. WSHttpBinding은 전송 보안 모드에만 지원됩니다.

NetTcpBinding, NetNamedPipeBinding 또는 NetMsmqBinding과 같이 HTTP 이외의 전송을 사용하는 바인딩은 부분 신뢰 환경에서 실행하는 경우 지원되지 않습니다.

사용자 지정 바인딩

사용자 지정 바인딩을 부분 신뢰 환경에서 만들어 사용할 수 있지만 이 단원에 지정되어 있는 제한 사항을 준수해야 합니다.

전송

유일하게 허용된 전송 바인딩 요소는 HttpTransportBindingElementHttpsTransportBindingElement입니다.

인코더

다음 인코더를 사용할 수 있습니다.

MTOM(Message Transmission Optimization Mechanism) 인코더는 지원되지 않습니다.

보안

부분 신뢰 응용 프로그램에서는 통신 보안 유지를 위해 WCF의 전송 수준 보안 기능을 사용할 수 있습니다. 메시지 수준 보안은 지원되지 않습니다. 메시지 수준 보안을 사용하도록 바인딩을 구성할 경우 런타임에 예외가 발생합니다.

지원되지 않는 바인딩

신뢰할 수 있는 메시징, 트랜잭션 또는 메시지 수준 보안을 사용하는 바인딩은 지원되지 않습니다.

Serialization

DataContractSerializerXmlSerializer는 모두 부분 신뢰 환경에서 지원됩니다. 그러나 DataContractSerializer의 사용은 다음 조건에 따라 결정됩니다.

  • serialize할 수 있는 모든 [DataContract] 형식은 public이어야 합니다.
  • [DataContract] 형식의 serialize할 수 있는 모든 [DataMember] 필드 또는 속성은 public이고 읽기/쓰기가 가능해야 합니다. readonly(영문 페이지일 수 있음) 필드의 serialization 및 deserialization은 부분 신뢰 응용 프로그램에서 WCF를 실행하는 경우 지원되지 않습니다.
  • [Serializable]/ISerializable 프로그래밍 모델은 부분 신뢰 환경에서 지원되지 않습니다.
  • 코드 또는 시스템 수준 구성(machine.config)에서는 알려진 형식을 지정해야 합니다. 보안상의 이유로 응용 프로그램 수준 구성에서는 알려진 형식을 지정할 수 없습니다.
  • IObjectReference를 구현하는 형식은 부분 신뢰 환경에서 예외를 throw합니다.

부분 신뢰 응용 프로그램에서 DataContractSerializer를 안전하게 사용할 때 보안에 대한 자세한 내용은 부분 신뢰를 위한 최선의 방법의 Serialization 단원을 참조하십시오.

컬렉션 형식

일부 컬렉션 형식은 IEnumerableIEnumerable을 모두 구현합니다. 예제에는 ICollection을 구현하는 형식이 포함되어 있습니다. 이러한 형식은 GetEnumerator()public 구현 및 GetEnumerator()의 명시적 구현을 구현할 수 있습니다. 이 경우 DataContractSerializerGetEnumerator()의 명시적 구현이 아니라 GetEnumerator()public 구현을 호출합니다. GetEnumerator() 구현이 모두 public이 아니고 모든 구현이 명시적 구현인 경우 DataContractSerializer IEnumerable.GetEnumerator()를 호출합니다.

WCF가 부분 신뢰 환경에서 실행될 때 컬렉션 형식의 경우 GetEnumerator() 구현이 모두 public이 아니거나 모든 구현이 명시적 인터페이스 구현이 아닌 경우 보안 예외가 throw됩니다.

NetDataContractSerializer

List, ArrayList, DictionaryHashtable와 같은 많은 .NET Framework 컬렉션 형식은 부분 신뢰의 NetDataContractSerializer에서 지원되지 않습니다. 이러한 형식에는 [Serializable] 특성이 설정되어 있으며 앞의 Serialization 단원에서 설명한 것처럼 이 특성은 부분 신뢰에서 지원되지 않습니다. DataContractSerializer는 컬렉션을 특별한 방법으로 다루기 때문에 이 제한을 해결할 수 있지만 NetDataContractSerializer에 이 제한 사항을 피할 수 있는 이러한 메커니즘이 없습니다.

DateTimeOffset 형식은 부분 신뢰의 NetDataContractSerializer에서 지원되지 않습니다.

서로게이트는 부분 신뢰에서 실행할 때 SurrogateSelector 메커니즘을 사용하여 NetDataContractSerializer와 함께 사용할 수 없습니다. 이러한 제한 사항은 서로게이트를 사용하는 경우에만 적용되며 서로게이트를 serialize하는 경우에는 적용되지 않습니다.

일반 동작이 실행되도록 설정

구성 파일의 <commonBehaviors> 섹션에 추가된 AllowPartiallyTrustedCallersAttribute 특성(APTCA)으로 표시되지 않은 서비스 또는 끝점 동작은 응용 프로그램이 부분 신뢰 환경에서 실행될 때 실행되지 않으며, 이러한 경우 예외가 throw되지 않습니다. 일반 동작을 실행하려면 다음 옵션 중 하나를 수행해야 합니다.

  • 부분 신뢰 응용 프로그램으로 배포될 때 실행될 수 있도록 일반 동작을 AllowPartiallyTrustedCallersAttribute 특성으로 표시합니다. APTCA로 표시된 어셈블리가 실행되지 않도록 컴퓨터에 레지스트리 항목을 설정할 수 있습니다. 자세한 내용은 How to: Make APTCA Assemblies Inaccessible to Partially Trusted Code를 참조하십시오.
  • 부분 신뢰 환경에서 응용 프로그램을 실행하기 위해 사용자가 코드 액세스 보안 설정을 수정할 수 없는 완전 신뢰 응용 프로그램으로서 응용 프로그램이 배포되는지 확인합니다. 사용자가 보안 설정을 수정할 수 있는 경우 동작이 실행되지 않고 예외가 throw되지 않습니다. 이를 확인하려면 Code Access Security Policy Tool (Caspol.exe)를 사용하는 levelfinal 옵션을 참조하십시오.

일반 동작의 예제는 방법: 엔터프라이즈에서 끝점 잠그기를 참조하십시오.

구성

한 가지 경우를 제외하고 부분 신뢰 코드는 로컬 app.config 파일에서 WCF 구성 섹션만 로드할 수 있습니다. machine.config 또는 루트 web.config 파일에서 WCF 섹션을 참조하는 WCF 구성 섹션을 로드하려면 ConfigurationPermission(Unrestricted)이 필요합니다. 이 권한 없이 로컬 구성 파일 외부에 있는 WCF 구성 섹션(동작, 바인딩)을 참조할 경우 구성을 로드할 때 예외가 발생합니다.

한 가지 예외는 이 항목의 Serialization 단원에서 설명한 것처럼 serialization에 대한 알려진 형식 구성입니다.

진단

이벤트 로깅

제한된 이벤트 로깅은 부분 신뢰에서 지원됩니다. 서비스 활성화 오류 및 추적/메시지 로깅 실패만 이벤트 로그에 로깅됩니다. 이벤트에 너무 많은 메시지를 기록하지 않도록 프로세스에서 로깅할 수 있는 최대 이벤트 수가 5로 설정되어 있습니다.

메시지 로깅

메시지 로깅은 WCF가 부분 신뢰 환경에서 실행되는 경우 작동하지 않습니다. 부분 신뢰에서 사용하도록 설정된 경우 서비스 활성화는 실패하지 않지만 메시지가 기록되지 않습니다.

추적

제한된 추적 기능은 부분 신뢰 환경에서 실행하는 경우 사용할 수 있습니다. 구성 파일의 <listeners> 요소에서 추가할 수 있는 형식은 TextWriterTraceListener 및 새로운 EventSchemaTraceListener뿐입니다. 표준 XmlWriterTraceListener를 사용하면 로그가 불완전하거나 잘못될 수 있습니다.

지원되는 추적 소스는 다음과 같습니다.

다음 추적 소스는 지원되지 않습니다.

TraceOptions 열거형에 대한 다음 멤버는 지정하지 않아야 합니다.

부분 신뢰 환경에서 추적을 사용하는 경우 응용 프로그램에 추적 수신기의 출력을 저장할 권한이 있는지 확인합니다. 예를 들어 TextWriterTraceListener를 사용하여 추적 출력을 텍스트 파일에 기록하는 경우 응용 프로그램에 추적 파일을 기록하는 데 필요한 FileIOPermission이 있는지 확인합니다.

참고

추적 파일에 중복 오류가 발생하는 것을 방지하기 위해 WCF에서는 첫 번째 보안 실패 후 리소스 또는 작업 추적을 사용하지 않습니다. 처음으로 리소스에 액세스하거나 작업을 수행할 때 실패한 각 리소스 액세스에 대해 한 가지 예외 추적이 있습니다.

WCF 서비스 호스트

WCF 서비스 호스트는 부분 신뢰를 지원하지 않습니다. WCF 서비스를 부분 신뢰에서 사용하려는 경우 서비스를 빌드하기 위해 Visual Studio에서 WCF 서비스 라이브러리 프로젝트 템플릿을 사용하지 마십시오. 대신 WCF 서비스 웹 사이트 템플릿을 선택하여 Visual Studio에서 새 웹 사이트를 만들고, 이를 통해 WCF 부분 신뢰가 지원되는 웹 서버에서 서비스를 호스팅할 수 있습니다.

기타 제한

WCF는 일반적으로 호스팅 응용 프로그램에서 적용된 보안 고려 사항으로 제한됩니다. 예를 들어 WCF가 XBAP(XAML 브라우저 응용 프로그램)에서 호스팅되는 경우 Windows Presentation Foundation 부분 신뢰 보안(영문 페이지일 수 있음)에 설명된 대로 XBAP 제한의 영향을 받습니다.

다음 추가 기능은 <token>indigo2</token>를 부분 신뢰 환경에서 실행하는 경우 사용할 수 없습니다.

  • WMI(Windows Management Instrumentation)
  • 이벤트 로깅은 부분적으로만 사용할 수 있습니다(진단 단원에서의 설명 참조).
  • 성능 카운터

부분 신뢰 환경에서 지원되지 않는 WCF 기능을 사용할 경우 런타임에 예외가 발생할 수 있습니다.

목록에 없는 기능

부분 신뢰 환경에서 실행할 때 사용할 수 없는 정보 또는 작업 부분을 검색하는 가장 좋은 방법은 리소스에 액세스하거나 try 블록 내의 작업을 수행한 다음 오류를 catch하는 것입니다. 추적 파일에 중복 오류가 발생하는 것을 방지하기 위해 WCF에서는 첫 번째 보안 실패 후 리소스 또는 작업 추적을 사용하지 않습니다. 처음으로 리소스에 액세스하거나 작업을 수행할 때 실패한 각 리소스 액세스에 대해 한 가지 예외 추적이 있습니다.

참고 항목

참조

HttpTransportBindingElement
HttpsTransportBindingElement
TextMessageEncodingBindingElement
WebMessageEncodingBindingElement

개념

지원되는 배포 시나리오
부분 신뢰를 위한 최선의 방법