2015-01-16 2 views
3

내 응용 프로그램은 DLL을로드하기 위해 AppDomain을 사용합니다. 나는 많은 문서를 읽을 AppDomain.GetLifetimeService가 null을 반환하는 이유는 무엇입니까?

Object '[...].rem' has been disconnected or does not exist at the server.

(예 http://msdn.microsoft.com/en-us/magazine/cc300474.aspx 또는 http://www.codeproject.com/Articles/14791/NET-Remoting-with-an-easy-example 닷넷에 관한 : 내가 5 분 이상에 대한 응용 프로그램 도메인에서 메서드를 호출하지 않으면 나는 다시 메서드를 호출 할 때 , 나는이 오류 Remoting Framework 및 Objects lifetime이 문제는 Leases와 관련이 있습니다. 즉, AppDomain 개체에 임대가 있고 임대가 만료되면 (기본적으로 5 분 후) 가비지 수집기가 AppDomainand를 수집하고 위에보고 된 예외가 throw됩니다 앱 도메인의 일부 회원이 액세스하는 경우 따라서 앱을 갱신하기 위해 내 AppDomain을 임대하려고합니다.

// Release the created AppDomain 
if (myDomain != null) 
    AppDomain.Unload(myDomain); 

// Create a new AppDomain 
domainInfo = new AppDomainSetup(); 
domainInfo.ApplicationBase = "c:\myDll.dll"; 
domainInfo.ApplicationName = "myExternalApp"; 

myDomain = AppDomain.CreateDomain("myAppName", null, domainInfo); 

myWrapper = (IDataManager) myDomain.CreateInstanceAndUnwrap("MYWrapper","MYWrapper.MyFunctions"); 

ILease lease = (ILease)myDomain.GetLifetimeService(); //but lease is null !!!!! 

"GetLifetimeService()"은 null을 반환합니다.

"AppDomain.InitializeLifetimeService()" 임대가 생성되지 않도록하여 AppDomain에 무한 수명을 부여합니다. 나는 또한 이것을 시도했다. 그러나 나는 여전히 위에서보고 된 오류를 얻는다.

내가 필요한 대상은 무엇입니까?

미리 도움을 청하십시오!

+0

대신 'AppDomain.InitializeLifetimeService'를 호출 해보세요. –

+0

나는 또한 이것을 시도했다. 그러나 나는 아직도 오류를 얻는다. – Homer1982

+1

흠, 아니요, AppDomains가 자동으로 언로드되지 않습니다. 객체를 생성하면 객체의 수명을 관리해야합니다. –

답변

3

원격 개체의 GetLifetimeService-Method를 재정의하려 했습니까? 아래 샘플 코드를 참조하십시오.

public class MyDataManager : MarshalByRefObject, IDataManager 
{ 
    {...} 

    public override object InitializeLifetimeService() 
    { 
     return null; 
    } 
} 
+0

감사합니다 !! 귀하의 제안은 문제를 해결합니다! 문제는 사실 _MarshalByRefObject_ 동일한 메서드에서 완전히 다른 동작을 _AppDomain_ _InitializeLifetimeService_ 호출했습니다. _MyDomain.CreateInstanceAndUnwrap (...) _을 사용하여 myWrapper를 만들 때 _MarshalByRefObject.InitializeLifetimeService() _가 호출되지만 랩퍼에 무한 수명이 부여되지 않습니다. – Homer1982

+0

제안한대로 _MarshalByRefObject.InitializeLifetimeService_를 내 클래스 _MYWrapper.MyFunctions_에서 무효화하여 myWrapper 무한한 수명을 제공합니다. @Scoregraphic 무한한 평생을 기원합니다 .-) – Homer1982

+0

기꺼이 도와 드리겠습니다. 당신도 대답으로 이것을 받아 들일 수 있습니다 ;-) – Scoregraphic

관련 문제