일단 만들어질 COM+을 사용할 기본 웹프로젝트를 하나 만들고
거기에 COM+ 을 구현하기 위한 프로젝트도 만들어줍니다~

대충 이런 모양이 됩니다.
웹프로젝트명은 Hello_Complus고. COM+ 프로젝트는 HelloComplus로 만들었어요
웹프로젝트에는 COM+에 대한 참조를 추가해주고
COM+ 프로젝트에는 System.EnterpriseServices를 추가해줍니다.

이제 COM+ 프로젝트에 Hello.cs라는 클래스를 추가해주고 코드를 작성해줍니다.



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.EnterpriseServices;

namespace HelloComplus
{
    //public으로 해줘야 겠죠?!
    public class Hello : ServicedComponent
    {
        public Hello()
        {
            //생성자
        }

        public string SayHello()
        {
            return "Hello!!!";
        }
    }
}

이 상태에서 웹프로젝트에서 SayHello 메소드를 호출할수는 없어요
COM+을 사용하기 위해선 몇가지가 더 필요합니다.

COM+ 는 반드시 강력한 이름을 가져야 합니다.

명령프롬프트에서 명령어로 어셈블리에 강력한 이름으로 서명을 할 수 있습니다.
VS 도구에있는 명령 프롬프트를 실행해서
 sn -k HelloComplus.snk
해서 새로운 키쌍을 생성 한 후에
COM+프로젝트의 Properties 아래에 있는 AssemblyInfo.cs에서 해상 키 파일을 등록해주면 됩니다.

AssemblyInfo.cs에서 고쳐주어야 할 께.
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 
// 해당 형식에 대해 ComVisible 특성을 true로 설정하십시오.
[assembly: ComVisible(true)]

ComVisible부분을 true로 해주는것과(기본은 false에요)
[assembly: AssemblyKeyFile("HelloComponent.snk")]

이렇게 만들어진 키 파일을 등록해 주면 됩니다.

(COM+이 강력한 이름을 가져야 하는 이유는 COM+가 시스템 레지스트리에 등록되어야 하기 때문이라고 합니다...)

그 후에는 COM+을 등록시켜주면 되는데요
좀전에 키파일을 만들때 처럼
명령 프롬프트에서

COM+프로젝트의 obj/Debug/ 에 들어가면 dll이 만들어져있잖아요. (아. 물론. 프로젝트를 컴파일해 줘야 합니다.)

regsvcs HelloComplus.dll 이라고 해주면 됩니다.

이 명령을 실행하기 전에 먼저. 해당 파일이 있는 경로까지 들어가야 해요.

그러면

이렇게 등록이 됩니다.
그럼 이놈은
레지스트리에도 등록이 되어있고
구성요소 서비스에도 등록이 됩니다.


찾아보면. 이렇게 등록되어 있는걸 볼수 있습니다.

이제 이 COM+이 사용이 되는지 간단하게 테스트를 해볼꼐요

웹프로젝트의 Default.aspx의 비하인드코드의 Load부분에 간단히 코드를 작성합니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HelloComplus;

namespace Hello_Complus
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Hello hello = new Hello();
            Response.Write(hello.SayHello());
        }
    }
}

그리고 실행을 하면


이렇게 나오네요

성공!!

근데. 한가지 문제아닌 문제가 있어요

COM+ 프로젝트를 빌드할때
오류는 없지만 경고가 뜹니다.


이런 오류인데요
아까 AssemblyInfo.cs에 키파일을 등록한 부분에서 나는 문제입니다.

사실 이렇게 나와도잘 되는데
(이게 .net framework와 vs 이전버전에서 사용했던 방법인가봐요)

그래도 이런 경고가 안나오게 하려면

    강력한 이름을 만들때 명령 프롬프트에서 sn으로 등록하지 말고
    COM+ 프로젝트의 속성에서 직접 만들어 줍니다.


이렇게만 하면
sn으로 키파일 만들고.
등록하고. 하는게 필요 없더라구요
(당연히 경고도 안나오죠..)

여기까지가 (아주)간단한 COM+ 만들기 였습니다.
by 피요히코~ 2010. 1. 6. 14:01