최근에 Remoting에 대해 알아보고 있는데, Remoting이 참 좋은 것 같다는 걸 깨달았습니다.
일반적으로 원격 기능을 사용하는 세 가지 방법이 있는데, 그 중 하나가
첫 번째 방법입니다. 공용 객체 게시
공용 개체는 로컬로 생성됩니다. 두 번째 유형: 공용 개체(SAO)의 원격 생성입니다.
클라이언트 요청의 세 번째 개체 생성 유형: 개인 개체(CAO)의 원격 생성
개체는 HOST에서 생성되고 클라이언트는 서버의 개체 디렉터리를 참조합니다.
이 세 가지 유형 간의 본질적인 차이점을 잘 이해하지 못합니다. 이 세 가지 방법의 원격 생성 방법도 다릅니다.
첫 번째 방법
주인:
ChannelServices.RegisterChannel(새 TcpChannel(1500));
cTransfer Trans = new cTransfer();
RemotingServices.Marshal(Trans, "TestService");클라이언트:
cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer),
"tcp://호스트:1500/TestService");
두 번째 방법
주인:
ChannelServices.RegisterChannel(새 TcpChannel(1500));
RemotingConfiguration.RegisterWellKnownServiceType(typeof(cTransfer),
"TestService", WellKnownObjectMode.Singleton);클라이언트:
cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer),
"tcp://호스트:1500/TestService");
세 번째 방법
주인:
ChannelServices.RegisterChannel(새 TcpChannel(1500));
RemotingConfiguration.RegisterActivatedServiceType(typeof(cTransfer));클라이언트:
object[] attr = {new UrlAttribute("tcp://host:1500")};
object[] args = {"샘플 생성자 인수"};
cTransfer T = (cTransfer) Activator.CreateInstance(typeof(cTransfer), args, attr);
원격 호출 처리를 허용하는 개체가 필요한 경우 이 개체는 MarshalByRefObject 클래스에서 상속되어야 합니다.
원격 중에 파일을 전송하는 방법은 무엇입니까? 기본 아이디어는 클라이언트에서 클라이언트의 파일을 열고 Byte[] 유형을 변환한 다음 호스트 개체를 호출하는 것입니다.
클라이언트와 호스트 간에 전송되는 객체
[직렬화 가능]
공개 구조체 kAction
{
공개 문자열 파일명;
공개 바이트[] 컨텍스트;
};파일을 열고 스트림 바이트를 컨텍스트에 저장합니다.
스트림 fileStream=File.Open(this.transFileName.Text,FileMode.Open);
파일스트림.위치=0;
byte[] Content = new byte[((int) fileStream.Length) + 1];
fileStream.Read(Content,0,Content.Length);
호스트는 Kaction을 읽은 후 지정된 폴더에 저장합니다.
MemoryStream meoeryStream=new MemoryStream(k_Action.context);
FileStream fileStream=new FileStream(@"d:"+k_Action.filename,FileMode.Create);
meoeryStream.WriteTo(fileStream);
fileStream.Close();
meoeryStream.Close();
해당 개체에 새 개체를 정의할 수 없는 것으로 나타났습니다. HOST로 전송을 준비할 때 "잠재적으로 위험한 유형이 포함되어 있습니다"라는 메시지가 표시됩니다.
[직렬화 가능]
공개 구조체 kAction
{
공개 문자열 파일명;
공개 바이트[] 컨텍스트;
public FineInfo fileInfo;//여기
};
당신의 생각을 기록해 보세요. 시간이 나면 정리해서 다음번에 완전한 글을 만들어 보겠습니다.
cnzc의 블로그