2011-01-17 5 views
2

몇 가지 라이브러리에서 일부 중간 신뢰 문제가 발생합니다. 샘플을 사용하여 오류를 재현하고이를 MVC 객관적으로 참조 할 수 있습니다. 나는이 문제를 해결하려고 노력하고 있지만 무엇이 실종되었는지 이해하지 못한다.Overriden 함수에 대한 SecurityCritical InitializeLifetimeService가 영향을주지 않습니다.

는이 오류가 계속 :

Inheritance security rules violated while overriding member: 'Temp.Class1.InitializeLifetimeService()'. Security accessibility of the overriding method must match the security accessibility of the method being overriden.

나는 위의 보안 투명성 오류를 이해하고 생각을, 나는 내 방법이 최우선 방법과 동일해야합니다. 다음은 수업입니다.

public class Class1 : MarshalByRefObject 
{ 

    [SecurityCritical] 
    public override object InitializeLifetimeService() 
    { 
     return null; 
    } 

} 

그리고 위와 같은 오류가 발생합니다.

추가하고 영향을 미치지 않고이 줄을 제거되었습니다

[assembly: AllowPartiallyTrustedCallers()] 

내가 할 일은이 방법에 SecurityCritical 특성을 추가하는 것입니다 다른 기사를 읽기하지만, 어떤 영향이하지 않는 것 같습니다.

어떤 아이디어가 있습니까?

답변

5

중간 신뢰 웹 응용 프로그램에서는 GACed 바이너리에만 완전 신뢰 권한이 부여됩니다. 바이너리가 bin-deployment되어있는 경우, 바이너리는 부분 신뢰이며 투명합니다. MSDN has a good write-up은 어떤 투명 코드가 할 수 있고 할 수 없습니까? 중요한 것은 [SecurityCritical] 멤버를 선언하는 은 완전 신뢰 전용 작업입니다. bin 배포 된 라이브러리에 [SecurityCritical]로 주석 된 멤버가 포함되어있는 경우 CLR은 해당 주석을 무시합니다.

라이브러리가 중간 트러스트에서 bin 배포 및 실행 가능하도록 설계된 경우 [SecurityCritical] 멤버를 재정의하거나 액세스 할 수 없습니다. 이러한 메소드를 호출하지 않도록 라이브러리 재 작업을 고려하십시오.

+0

아아아, 그 링크를 다시 읽어 보았습니다. "또한 투명 메소드는 중요한 가상 메소드를 오버라이드하거나 중요한 인터페이스 메소드를 구현할 수 없습니다."그리고 bin 배치 된 설명을 통해이를 이해할 수 있습니다. 문서에서 조금 더 명확 해졌 으면 좋겠다. 감사! – adriaanp

+0

"GACed 바이너리 만 완전 신뢰를 받음"은 부분적으로 만 사실입니다. 그들은 기본적으로 완전한 신뢰를 받지만, GAC에 넣지 않고도 특정 어셈블리 (심지어는 bin 배치 된)를 신뢰하도록 사이트를 구성 할 수 있습니다. http://xheo.com/knowledge-base/deploylx/licensing/full-trust-required-in-asp-net –

+0

"이러한 메소드를 호출하지 않도록 라이브러리 재 작업을 고려하십시오." - 분명히 Levi는 InitializeLifetimeService가 무엇인지 알지 못합니다. "당신"도서관은 그것을 부르지 않습니다. .NET 프레임 워크 자체에서이를 호출합니다. 그 목적은 (대략) MarshalByRefObject의 조기 가비지 수집을 막는 것입니다. InitializeLifetimeService를 재정의하지 않으면 개체가 6 분 후에 수집됩니다. 분명히 Microsoft는 부분적으로 신뢰할 수있는 원격 개체는 항상 6 분 동안 지속되어야한다고 생각합니다. 적어도 1 분마다 호출하여 객체를 유지하는 것이 가능해야합니다. – Qwertie

관련 문제