Client 소스 예제.(Client.EXE)
using System;
using ActMode;
using System.Runtime.Remoting; // RemotingConfiguration
namespace ActClient
{
///
/// Summary description for Class1.
///
class Class1
{
static void Main(string[] args)
{
// 원격 객체 프록시 생성
//ActModeClass obj = (ActModeClass)Activator.GetObject(typeof(ActMode.ActModeClass), "http://localhost:1111/ActModeUri");
//RemotingConfiguration.RegisterActivatedClientType(typeof(ActMode.ActModeClass), "http://localhost:1111/ActModeApp");
//ActModeClass obj = new ActModeClass();
ActModeClass obj = (ActModeClass)Activator.GetObject(typeof(ActMode.ActModeClass),
"tcp://localhost:1111/ActModeUri");
// 알림 메시지 표시
Console.WriteLine("끝내려면 /quit 를 입력하세요.");
while (true)
{
// 이용자로부터 문자열을 받는다
string strText = Console.ReadLine();
// "/quit" 문자열을 입력하면 프로그램을 종료시킨다
if (strText == "/quit")
break;
// 원격 객체의 메서드를 호출한다
obj.AddString(strText);
}
}
}
}
Server 소스 예제.(Server.EXE)
using System;
using System.Runtime.Remoting; // RemotingConfiguration
using System.Runtime.Remoting.Channels; // ChannelServices
using System.Runtime.Remoting.Channels.Tcp; // HttpChannel
namespace ActHosting
{
///
/// Summary description for Class1.
///
class Class1
{
[STAThread]
static void Main(string[] args)
{
// HTTP 1111 port 채널을 등록한다
//ChannelServices.RegisterChannel(new HttpChannel(1111));
ChannelServices.RegisterChannel(new TcpChannel(1111));
// ActMode 어셈블리의 ActModeClass를 Singleton 모드로 등록한다
// RemotingConfiguration.RegisterWellKnownServiceType(typeof(ActMode.ActModeClass), "ActModeUri", WellKnownObjectMode.Singleton);
//RemotingConfiguration.RegisterWellKnownServiceType(typeof(ActMode.ActModeClass), "ActModeUri", WellKnownObjectMode.SingleCall);
//RemotingConfiguration.RegisterActivatedServiceType(typeof(ActMode.ActModeClass));
//RemotingConfiguration.ApplicationName = "ActModeApp";
// ActMode 어셈블리의 ActModeClass를 Singleton 모드로 등록한다
RemotingConfiguration.RegisterWellKnownServiceType(typeof(ActMode.ActModeClass),
"ActModeUri", WellKnownObjectMode.SingleCall);
// 이용자 알림 메시지
Console.WriteLine("호스팅 어플리케이션이 시작되었습니다.");
Console.WriteLine("엔터키를 누르면 종료합니다.");
// 대기 모드로 들어간다
Console.ReadLine();
}
}
}
object 소스 예제.(DLL)
using System;
namespace ActMode
{
///
/// Summary description for Class1.
///
public class ActModeClass : MarshalByRefObject
{
string m_strString;
public ActModeClass()
{
Console.WriteLine("생성자가 호출되었습니다.");
}
public void AddString(string strStr)
{
m_strString += strStr;
Console.WriteLine(m_strString);
}
}
}
참조
- System.Runtime.Remoting 을 하시고
using 부분은 주의 깊게 봐 주십시요.
깊이있게 공부하실분은 channel 통신을 검색해서 공부하시기 바랍니다.
'객체지향언어 > C#' 카테고리의 다른 글
Linq 공부 (0) | 2009.11.26 |
---|---|
IPC 통신기법 (channel을 통한 IPC 통신방법) (0) | 2009.11.25 |
esCapeCheck 때문에 만들어본 것인데... (0) | 2009.11.25 |
C# 특징을 나름 정리해 본것입니다. (0) | 2009.10.03 |
강의계획서 초안 디자인 (0) | 2009.09.03 |