잊지 않겠습니다.

.NET Remoting

.NET Framework 2009.01.07 10:50

.NET Framework에서 응용프로그램 도매인은 System.AppDomain안에서 움직이는 논리적인 경계로서 나뉘게 된다.

이러한 논리적인 경계내에서 나뉘어진 응용프로그램간의 통신을 일컬여 .NET Remoting이라고 칭한다.

.NET Remoting은 다음과 같이 구성된다.

  1. 동일한 프로세스(같은 컴퓨터안에 있는) 두 응용 프로그램 도매인
  2. 동일한 머신의 개별 프로세스 안에 있는 두 응용 프로그램 도매인
  3. 서로 다른 머신의 개별 프로세스 안에 있는 두 응용 프로그램 도매인

        

.NET Remoting의 이용

System.Runtime.Remoting안에 선언된 형식을 주로 이용한다.각 AppDomain간의 통신은 Channel을 통해서 이루어지며, 이 Channel은 두가지 형식으로 되어 있다.

1) HttpChannel : HttpChannel Class 형식으로 표현되며, SOAP Formatter를 이용해서 데이터가 변환된다.

  • 데이터의 크기가 Binary Formatter에 비하여 크다.
  • 데이터가 방화벽에 막힐 수도 있다.

2) TcpChannel : TcpChannel Class 형식으로 표현되며, Binary Formatter를 이용해서 데이터가 변환된다.

  • 데이터가 크다.
  • 데이터가 방화벽에 막힐 염려가 적다.

2개 이상의 Channel을 같이 사용하는 경우에는 한 AppDomain에서의 Channel은 항시 다른 이름과 Port를 가지고 있어야지 된다. 

각 이름과 Port를 2개 이상 생성을 시켜서 Channel을 항상 다른 상태로 만들어야지 된다.

System.Collections.IDictionary prop = new System.Collections.Hashtable();
prop["name"] = "tcp1";
prop["port"] = "9113";
ChannelServices.RegisterChannel(new TcpChannel(prop, null, null));   

원격 객체의 종류

MBR(marshal by reference)
  • 호출자가 원격 객체에 대한 proxy를 받아준다.
  • 구현 : System.MarshalByRefObject class에서 파생된다.
MBV(marshal by value)
  • 호출자가 원격 객체의 객체 사본을 받는다. (Client copy본을 만들어준다.)
  • 구현 : Serializable 속성으로 구현한다.

Serial되지도 않고, System.MarshalByRefObject에서 상속되지도 않는 class는 만들어진 응용 프로그램 도매인 안에서만 활성화 되며, 사용될 수 있다. (Contextound type이 된다.)  

  • 서버 활성 개체는 필요할 때만 서버에서 만들어집니다. 즉, new 또는 Activator.GetObject를 호출하여 클라이언트 프록시를 만들 때가 아니라 클라이언트에서 해당 프록시에 대한 첫 번째 메서드를 호출할 때 만들어집니다. 자세한 내용은 서버 활성화를 참조하십시오.
  • Singleton 개체는 해당 개체에 대한 클라이언트의 수에 상관없이 항상 하나의 인스턴스만 있으며 기본 수명을 가지는 개체입니다.클라이언트에서는 수명 임대 시스템을 사용하여 Singleton 인스턴스의 수명에 관여합니다. 자세한 내용은수명 임대를 참조하십시오.
  • 개체를 SingleCall 개체로 구성하면 시스템에서는 클라이언트에서 메서드를 호출할 때마다 새 개체를 만듭니다. 클라이언트가 각 호출에서 새 인스턴스에 대한 참조를 얻기 때문에 SingleCall 형식은 수명 임대 시스템에 관여하지 않습니다.        

Singleton 형식은 한 번에 하나 이상의 인스턴스를 가질 수 없습니다. 하나의 인스턴스가 있는 경우 모든 클라이언트 요청은 해당 인스턴스에서 처리됩니다. 인스턴스가 없는 경우에는 서버에서 인스턴스를 만들며 모든 후속 클라이언트 요청은 이 인스턴스에서 처리됩니다. Singleton 형식에는 기본 수명이 연관되어 있지 않으므로 한 번에 하나 이상의 인스턴스를 사용할 수 없는 경우라도 클라이언트에서 항상 원격화할 수 있는 클래스의 동일한 인스턴스에 대한 참조를 받는 것은 아닙니다.

SingleCall 형식은 항상 클라이언트 요청마다 하나의 인스턴스를 가집니다. 다음 메서드 호출은 시스템에서 이전 인스턴스를 아직 재생하지 않은 경우에도 다른 서버 인스턴스에 의해 처리됩니다. SingleCall 형식은 수명 임대 시스템에 관여하지 않습니다.

신고
Posted by xyzlast Y2K

제목이 너무나도 거창한 제목이 되어버렸지만... 이런 제목 이외에는 적을 내용이 없어서 이런 제목으로 밖에 못적겠다. --;

  

d0037487_489d8a444c8b5.png 

 여기에서 3.5에서 구현된 LINQ, ADO.NET Entity Framework는 결국은 Data의 object화 라는 말로 표현할 수 있다.

MS가 이제는 시스템기반이 아닌 데이터를 어떻게 다루고, 그 데이터를 어떻게 하느냐에 대한 관심으로 넘어가고 있는 단적인 내용이 아닐까 하는 생각을 하게 만든다.

  

먼저, LINQ를 사용해보면서, MS에서 이야기하는 Data의 object화는 ruby on rails에서 나온 개념과 너무나도 유사한 것이 재미있다는 생각도 들고, ruby를 잠시 공부해보면서 이렇게 멋진 내용이 있다는 것에 대해서 감탄을 하고 있었는데. 결국은 MS에서 그대로 따라가는 것이 좋은것은 다들 좋다고 생각하는 것 같다.

  

그리고, 차기 버젼에서 나올 기술들은 둘다 "P"를 가지고 있는데... 

이는 둘다 Parallel의 약자이다.  

  

Task Parallel Library, Parallel Language Integrated Query 둘다 multi-processor 기반의 Library로, 기존 single-processor에서는 큰 성능향상이 나타나지 않음을 MS에서도 제시하고 있다. (“Parallel Performance: Optimize Managed Code For Multi-Core Machines: http://msdn2.microsoft.com/en-us/magazine/cc163340.aspx”)

  

그렇다하더라도.. 무언가 새로운 것은 계속 만들어져가고 있고, 그 새로운 것들을 이용한 막강한 기능은 계속해서 손에 쥐어지고 있다. 보다 더 나은 S/W를 만들기 위한 방법은 계속해서 제시되어가고 있는데... 왜 사람은 계속해서 오래된 생각만을 계속하게 되는 것일까.

  

과연 1+1이 2가 되는 것이 사람일까?  

신고
Posted by xyzlast Y2K

I can't write Hangule on linux system(openSUSE 10.3).

 

with mono 1.9.1(beta)

1) use C# 3.0 feature

2) can use LINQ.

3) can use System.Core like C# 3.5

4) can use visual IDE enviroment.

 

-> It's Excellant! T_T

 

Screenshot.png

: it's mono development.

it can check syntec like visual studio but can't check linq syntex. but it's very fast.

 

download mono-project vm.(VMWare Image)

http://www.go-mono.com/mono-downloads/download.html

신고
Posted by xyzlast Y2K


티스토리 툴바