2009-01-30 5 views
1

지금은 프로토 타입 단계입니다. 그래서 저는 지금 막 시작하고 있습니다..NET Remoting - 서버가 클라이언트를 어떻게 업데이트 할 수 있습니까?

상황 : 서버 - 테스트가 실행되어 클라이언트에 진행 상태가 게시되며 영향이 적고 웹 서버가 없으며 xp embedded 또는 xp home이 실행 중일 수 있습니다.

클라이언트 - 테스트를 시작하고 진행률 보고서를받습니다. xp pro를 실행 중입니다.

두 기계는 이더넷을 통해 연결됩니다. .NET Remoting을 사용하여 두 시스템 간 통신을하고 싶습니다. 이벤트를 사용하여 서버의 새로운 결과로 클라이언트를 업데이트하고 싶습니다. 그러나이 이벤트는이 조건에서 신뢰할 수 없습니다. 어떻게해야합니까? 서버가 클라이언트에 연결하고 이벤트를 게시하기 위해 원격을 사용할 수 있습니까? 그게 괜찮을까요?

답변

0

서버를 클라이언트에 연결하면 실제로 모델을 뒤집어 서버가 클라이언트가되고 그 반대의 경우도 마찬가지입니다.

클라이언트가 테스트를 시작하는 것이 좋으며 상태 업데이트를 위해 서버를 폴링하는 것이 좋습니다.

원격 선택은 실제로 큰 문제는 아니며 (제공 한 의견에는 영향을 미치지 않습니다.) '대체되었지만 여전히 지원되는'기술로 시간을 소비하는 대신 교체 (WCF)를 조사하고 싶을 수 있습니다. .

3

한번은 원격을 사용하는 시스템을 배포하고 서버는 클라이언트가 가입 할 수있는 몇 가지 이벤트를 시작했습니다.

가능하게하려면 typeFilterLevel을 full로 설정해야하며 클라이언트와 서버에서 알려진 '중간'개체를 만들어야만 해당 개체를 처리 할 수 ​​있습니다. 이벤트.

예 : 클라이언트 측 서버 &에 알려진 클래스입니다. 클라이언트 측에서

public abstract class MyDelegateObject : MarshalByRefObject 
{ 
    public void EventHandlerCallback(object sender, EventArgs e) 
    { 
     EventHandlerCallbackCore(sender, e); 
    } 

    protected abstract void EventHandlerCallbackCore(object sender, EventArgs e); 

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

, 당신은 위의 클래스에서 상속, 이벤트가 발생할 때 수행해야하는 실제 로직을 구현하는 다른 클래스를 만듭니다.

public class MyConcreteHandler : MyDelegateObject 
{ 
    protected override EventHandlerCallbackCore(object sender, EventArgs e) 
    { 
     // do some stuff 
    } 
} 

당신은 단순히 같은 원격 객체의 이벤트에 이벤트 핸들러를 첨부 : 당신이 당신의 핸들러 클래스의 WinForm 컨트롤을 업데이트 할 경우

MyConcreteHandler handler = new MyConcreteHandler(); 
myRemoteObject.MyEventOccured += new EventHandler(handler.EventHandlerCallback); 

Offcourse, 그 클래스는 ISynchronizeInvoke을 구현해야합니다.

3

아직 프로토 타입 단계에 있으므로 원격 처리 대신 Windows Communication Foundation (WCF)을 사용하는 것이 좋습니다. WCF에는 publish-subscribe scenarios에 대한 지원 기능이 내장되어 있으며 .NET Remoting 및 웹 서비스의 모든 기능이 이미 포함되어 있습니다.

관련 문제