[WPF] 공공데이터 포털 API 이용 클라이언트 구현 Part 3

이미지
그룹핑 ListViewItem 그룹핑 할 수 있습니다. 먼저 CheckBox에 Checked 이벤트를 통해 그룹핑을 추가하고 RemoveChecked 이벤트를 통해 그룹핑을 제거 할 수 있도록 CheckBox를 선언 합니다. 1: <!-- Group CheckBox --> 2: <CheckBox Grid.Column="0" 3: Grid.Row="0" 4: Checked="AddGrouping" 5: Unchecked="RemoveGrouping">Group by Name</CheckBox> 그룹 스타일 선언 GroupStyle 속성에 ContainerStyle 속성을 이용해 Style을 지정 합니다. Expander 컨트롤을 이용해 아파트명과 그룹 아이템의 개수를 Expander Header에 표시 하도록 ControlTemlate를 선언 합니다. 1: <!-- Group Style --> 2: <ListView.GroupStyle> 3: <GroupStyle> 4: <GroupStyle.ContainerStyle> 5: <Style TargetType="{x:Type GroupItem}"> 6: <Setter Property="Margin" Value="0,0,0,5" /> 7: <Setter Property="Te...

.Net을 이용한 COM 구성요소 구현

.Net을 이용한 COM 구성요소 

유지보수 하고 있던 Classic Asp 에서 사용하고 있는 Com을 교체할 일이 생겨 글을 남겨 보려고 합니다.

클래스 멤버가 COM에 표시 시 따라야 하는 규칙

  • 클래스는 Public 이어야 한다.
  • 속성, 메서드 및 이벤트는 public 이어야 합니다.
  • 속성 및 메서드는 클래스 인터페이스에서 선언되어야 합니다.
  • 이벤트는 이벤트 인터페이스에서 선언되어야 합니다.
이번 예제는 문자열을 반환하는 간단한 메서드를 가지는 Com을 생성하고, Classic ASP를 이용하여 등록된 Com을 호출 하는 웹 페이지를 생성해 볼 예정 입니다.

프로젝트 생성

클래스 라이브러리 프로젝트를 생성 합니다.

Interface 생성

Interface가 COM에 표시 될 수 있도록 어트리뷰터 설정 합니다.

1:  [ComVisible(true)]  
2:    public interface ISampleComClass  
3:    {  
4:    }  

COM 컴포넌트의 기능은 하나 이상의 Inteface를 통해 노출 됩니다. 노출 하려는 인터페이스를 아이디(IIDs)로 식별할 수 있도록 GUID 어트리뷰트를 설정 합니다.
(Visual Studio의 도구 메뉴를 사용하면 쉽게 생성 됩니다.)

1:  [ComVisible(true)]  
2:    [Guid("6E19CBE2-1390-4CF7-8396-E89A7CE1C779")]  
3:    public interface ISampleComClass  
4:    {  
5:    }  

InterfaceIsDual으로 COM에 인터페이스를 노출하는 방법을 설정 합니다.

1:  [ComVisible(true)]  
2:    [Guid("6E19CBE2-1390-4CF7-8396-E89A7CE1C779")]  
3:    [InterfaceType(ComInterfaceType.InterfaceIsDual)]  
4:    public interface ISampleComClass  
5:    {  
6:    }  

기능을 정의 합니다.

1:  [ComVisible(true)]  
2:    [Guid("6E19CBE2-1390-4CF7-8396-E89A7CE1C779")]  
3:    [InterfaceType(ComInterfaceType.InterfaceIsDual)]  
4:    public interface ISampleComClass  
5:    {  
6:      string SayHello(string name);  
7:    }  

Class 생성

관리되는 C# 개체의 COM에 표시 될 수 있도록 어트리뷰터 설정 합니다.

1:  [ComVisible(true)]  
2:    public class SampleComClass  
3:    {  
4:    }  

COM 컴포넌트들은 클래스 아이디(CLSIDs)로 식별하는데 필요한 GUID 어트리뷰트를 설정 합니다.

1:  [ComVisible(true)]  
2:    [Guid("8859ABA6-D62D-4A01-9F80-D8818BC63355")]  
3:    public class SampleComClass  
4:    {  
5:    }  

COM 컴포넌트에 접근할 때 필요한 ProgId를 클래스에 할당 합니다.

1:  [ComVisible(true)]  
2:    [Guid("8859ABA6-D62D-4A01-9F80-D8818BC63355")]  
3:    [ProgId("BloggerSampleCom.SampleComClass")]  
4:    public class SampleComClass  
5:    {  
6:    }  

COM 클라이언트는 ISampleComClass 인터페이스 메서드를 사용해 이 클래스의 멤버를 호출 할 수 있게끔 ClassInterfaceType.None으로 설정 합니다.

1:  [ComVisible(true)]  
2:    [Guid("8859ABA6-D62D-4A01-9F80-D8818BC63355")]  
3:    [ProgId("BloggerSampleCom.SampleComClass")]  
4:    [ClassInterface(ClassInterfaceType.None)]  
5:    public class SampleComClass  
6:    {  
7:    }  

ISampleComClass를 상속받아 멤버를 구현 합니다.

1:  [ComVisible(true)]  
2:    [Guid("8859ABA6-D62D-4A01-9F80-D8818BC63355")]  
3:    [ProgId("BloggerSampleCom.SampleComClass")]  
4:    [ClassInterface(ClassInterfaceType.None)]  
5:    public class SampleComClass : ServicedComponent, ISampleComClass  
6:    {  
7:      public string SayHello(string name)  
8:      {  
9:        return string.Format("Hello! {0}", name);  
10:      }  
11:    }  

강력한 키를 생성하여 지정 합니다.



regsvcs 파일을 이용해 구성 요소 서비스에 등록 합니다.



이제 구성요소 서비스에 등록까지 했으니, Classic Asp에서 호출해서 사용해 보겠습니다. IIS 세팅은 다들 아실거라 믿으며 따로 설명하지 않겠습니다;;

asp 소스 페이지를 아래와 같이 작성하고 IIS 세팅이 되었습니다.

1:  <%  
2:    set oSample = Server.CreateObject("BloggerSampleCom.SampleComClass")  
3:    strHello = oSample.SayHello("Yoo")  
4:    response.write strHello  
5:  set oAuth = Nothing  
6:  %>  

브라우저에서 asp 페이지 호출 결과 입니다.









댓글

이 블로그의 인기 게시물

[C#] Task 완료 시 다른 Task를 자동으로 수행

[C#] 태스크(Task)가 완료될 때 까지 대기하여 결과를 얻는 방법

[C#] 명시적으로 Task 생성 및 실행