8
원격 서비스 (.NET Remoting
)에서 Streams
을 반환합니다. 그러나 Streams
은 또한 우리 모두가 알고있는 것처럼 폐기 처분됩니다..NET Remoting을 통해 원격 객체에서 Stream을 반환 할 때 커버 아래에 발생하는 일
소비가 끝나면 클라이언트 측에서 Dispose
으로 전화 할 수 있습니다. 그러나 원격 객체에서 Stream
을 반환 할 때 정확히 무엇이 커버 아래에 발생하는지 알고 싶습니다.
특히 :
- 나는 더 나은
byte[]
에 모든 것을 읽어야하고는Stream
대신 반환? - 또는 .NET Remoting이 나를 위해 그 일을 처리하고 있습니다.
- 그렇지 않은 경우
Stream
과 다른 반환은byte[]
과 어떻게 다른가요? 결국.NET Remoting
은 어쨌든 데이터를 직렬화해야합니다? - 클라이언트 측에서
Dispose
을 호출해도 아무런 영향이 없습니까? 클라이언트 측의 객체와 서버 측의 객체간에 마 법적 연결이 있습니까? 일단 커버리지 뒤에서 역 직렬화가되면 클라이언트 측에서Dispose()
을 호출하는 것은 의미가 없습니까? 나는 또한 질문 좋아 조금을 개선하기 원하기 때문에
는 여기 마이크 빌트에 응답, 그래서 다시 서버에 이야기 흐름은 (나를 위해 적어도) 예기치입니다.
public static class ServiceFactory <T> { public static T CreateProxy() { Type interfaceType = typeof(T); string uri = ApplicationServer.ServerURL + interfaceType.FullName; return (T)Activator.GetObject(interfaceType, uri); } }
그래서 당신은 명시 적으로 소비하는 몇 가지 URI에서 특정 원격 객체를 위해 밖으로 도달하고 있습니다 : 은 하나 같이 뭔가를 가지고있는 원격 객체를 cosume합니다. 그리고 그 원격 객체에 대한 메소드가 MarshallByRefObject로부터 상속받은 객체를 반환하면 자동으로 그 객체가 원격 객체의 객체와 연관되어 있음을 의미합니까? 좋아, 그건 내가 만든 테스트 객체로 재현하기 쉽다. 그래서 이것은 또한 클라이언트 측에서 Dispose를 호출해야한다는 것을 의미하며, 서버 측의 객체로 다시 프록시됩니다.
MarshalByRefObject는 클라이언트 측에서 수명 관리를 위해 IDisposable을 구현해야합니다. 예, 클라이언트 쪽에서 Dispose()를 호출하면 서버 쪽에서 "공유"개체가 삭제됩니다. –
내 추천 - 바이트 배열 또는 파일과 같은 새 스트림과 같은 스트림을 구체화 할 때까지 MBR 개체와 관련된 모든 유형의 IDisposable 구현 –
좋아, 100 % 맞음 :) 방금 상속 된 사용자 지정 개체를 반환했습니다. MBR에서 중단 점을 설정하여 표시되도록합니다. 재미있는 부분은 다음과 같습니다. 2009 년에 양방향 NotificationService를 포함하여 일반적인 ApplicationServer를 작성했습니다.이 방법으로 작업하지 않으면 불가능합니다. http://www.mycsharp.de/wbb2/thread.php?threadid=75670 나는 그것을 잊어 버린 것 같다. 어쨌든, 당신은 내 두뇌를 새로 고칠 시간을 가졌습니다. – Christoph