2009-02-08 2 views
2

MarshalByRef 개체를 사용하여 서버 쪽에서 스레드를 처리하는 방법을 알고 싶습니다..NET remoting 스레딩 모델

을 감안할 때 내 원격 화 MarshalByRef 클래스 :

public class MyRemotedClass : MarshalByRef 
{ 
    public int MyInt; 
    public string MyString; 
} 

클라이언트 코드 (단일 스레드) : 서버 측에

MyRemotedClass m = GetSomehowMyRemotedClass(); 
m.MyInt = 5; // Write operation 1 
m.MyString = "Hello World"; // Write operation 2 

, 우리는이 쓰기 작업을해야합니다. 스레드가 ThreadPool에 있다고 가정합니다. 그러나 클래스가 MarshalByRef이므로 두 opeations는 별도의 원격 프로 시저 호출입니다. 그들은 별도의 스레드에서 실행됩니까? 그렇다면 작업 1이 완료되기 전에 작업 2가 실행될 수 있습니까?

추 신 : MyRemotedClass MarshalByRef를 작성하는 것은 나쁜 결정입니다. 그러나 나는 그것을 바꿀 수 없으므로 그것을 제안하지 마십시오.

답변

2

나는이에 대한 전문가는 아니지만 정말 MyInt에 쓰기가 안정적으로 클라이언트 이벤트가 당신이가는 펑키 비동기 동작을 가지고하지 않는 한 MyString에 쓰기를 시도하기 전에 완료 할을 기대.

어쨌든 할당이 실패하는 경우, 처리하기 전에 현명한 예외 처리가 예외를 throw하는 것입니다. 내가 비동기 적으로 발생하지 않는이 속성을 설정, 그것에 대해 생각하는 것처럼 지금까지 실제로

2

, 그것은 RPC 시작하기 전에 1 RPC가있는 경우 2.

어쨌든 완료 될 때까지 클라이언트가 대기 때문에 MyRemotedClass가 싱글 톤 서버 활성 개체로 구성되어 있지 않으면 MyRemotedClass에서 수행하는 모든 RPC에 대해 서버에 새 인스턴스가 만들어집니다. 즉, 리모트 오브젝트에는 상태가 포함되지 않아야합니다.

+0

MarshalByRefObject 인 경우 새 인스턴스를 만들지 않을 것이라고 생각하지 않습니다. MBRO의 전체적인 요점은 단지 참조가 마샬링되고 객체 자체가 서버에 "존재"한다는 것입니다. –

+0

- 따라서 원격 평생 서비스/임대. –