|
소 속 |
선문 비트 23기 |
작성일 |
2012.04.09 |
주 제 |
Remoting + Reflection |
작 성 자 |
이 동 현 |
개발도구 |
Visual Studio 2010 |
1. Server |
public class DHServer:MarshalByRefObject // Library 형태의 서버 엔진 { public void ViewMsg(string msg) { Console.WriteLine(msg); } } private static void ServerOpen()// Service Part { Assembly asm = Assembly.Load("EchoServer"); Object obj = asm.CreateInstance("EchoServer.DHServer"); //명시한 클래스의 Instance 생성 Type type = obj.GetType();
ChannelServices.RegisterChannel(new TcpChannel(7190)); // TcpChannel 등록 RemotingConfiguration.RegisterWellKnownServiceType(type,"DH.EchoServer", WellKnownObjectMode.Singleton); Console.ReadLine(); } |
2. Client |
private void Connect() { ChannelServices.RegisterChannel(new TcpChannel());// Tcp 채널등록 Assembly asm = Assembly.Load("EchoServer"); Object obj = Activator.GetObject(asm.GetType("EchoServer.DHServer"), "TCP://192.168.34.69:7190/DH.EchoServer"); Type type = obj.GetType();
MethodInfo mi = type.GetMethod("ViewMsg"); object[] parameters = new object[1]; while (true) { parameters[0] = Console.ReadLine(); mi.Invoke(obj, parameters); if (parameters[0].ToString() == "끝") { Console.WriteLine("종료합니다."); break; } } } |
3. Reflection |
namespace DHLib { public class Calculator { public string ID { get; set; } public int Add(int a, int b) { return a + b; } } }
private static void UsingLib() { Assembly asm = Assembly.Load("DHLib"); Object obj = asm.CreateInstance("DHLib.Calculator"); Type type = obj.GetType();
// Property 값 설정 및 가져오기 PropertyInfo pi = type.GetProperty("ID"); pi.SetValue(obj, "홍길동", null); string ID = (string)pi.GetValue(obj, null); Console.WriteLine(ID);
// Method 설정 및 호출 MethodInfo mi = type.GetMethod("Add"); object[] parameters = new object[2]; parameters[0] = 5; parameters[1] = 10; object result = mi.Invoke(obj, parameters); Console.WriteLine(result); } |