GSI

웹 서비스 연동 방법 - <웹 서비스를 사용하다.!>

웹 서비스를 이용하면 응용 프로그램을 서버를 경유 하지 않고, 네트윅을 접근할 수 있다는 장점이 있습니다.
그래서 이번 프로젝트는 응용 프로그램 + 웹 서비스를 연동해서 어플리케이션을 제작할려고 합니다.
그 내용 중에서 웹 서비스 최초 연동 부분만 우선 살펴 보겠습니다.

웹 서비스를 제작하기 위해서 프로젝트를 생성합니다.
참고로 전 2008 beta2를 만지고 있어서 그쪽에서 했습니다.

사용자 삽입 이미지


ASP.NET Web Service 를 선택하고 File System, C#을 선택한 후에 프로젝트를 생성합니다.

테스트기 때문에 HelloWorld를 그대로 사용하겠습니다.

    [WebMethod]
    public string HelloWorld() {
        return "Hello World";
    }

이후에 서비스를 사용할 클라이언트를 만들어야 하는데요.
전 mfc로 싱글뷰를 사용했습니다.
내부에 MFC 확장 DLL을 사용해서 CDialog를 상속 받은 클래스를 하나 제작하고
그 쪽에서 웹 서비스를 연동해 봤습니다. (결과는 잘 되는군요.)

우선 웹 서비스를 참조 해야 하기 때문에 웹 서비스를 iis쪽에 등록 하시던지 간단하게
 테스트만 할 거라면 우선 디버그 상태로 뛰우게 되면 아래와 같은 임시 주소가 생기게 됩니다.
이거 보면서 참 편하다는 생각이 들었죠.

이 주소가 나왔으니 mfc 프로젝트에서 참조 추가를 해보겠습니다.
사용자 삽입 이미지
위와 같이 참조 라는 곳에서 "웹 참조 추가"를 선택 합니다.

사용자 삽입 이미지

이런 화면이 나오게 되는데요 여기서 URL 쪽에 아까 디버그로 실행한 웹 주소나 iis에 추가한
주소를 적어 주시고 "이동" 버튼을 누르면 해당 내용이 나오게 됩니다.
웹 참조 이름은 다르게 수정이 가능합니다.

"참조 추가" 버튼을 누르면 프로젝트에 포함이 됩니다.
사용자 삽입 이미지
이런 몇개의 파일이 자동으로 생성되게 됩니다.
이제 이것을 사용하기 위해서 우선 클래스 상태를 보기 위해서 "개체 브라우저"를 엽니다.
사용자 삽입 이미지
위와 같이 LoginSvr 이라는 네임 스페이스와 CLoginSvr 이라는게 보입니다.
CLoginSvr은 아래와 같이 typedef 되어 있네요.

typedef class LoginSvr::CLoginSvrT<> CLoginSvr
    LoginSvr의 멤버

이제 사용하는 방법만 남았네요.
아래와 같이 사용해서 처리 하시면 됩니다.

LoginSvr::CLoginSvr svr;
BSTR bstrStatus2;
svr.HelloWorld(&bstrStatus2);
m_szEdit = bstrStatus;
::SysFreeString( bstrStatus2 );
UpdateData(false);

여기서 보면 C#이나 asp.net 쪽의 프로그램과는 좀 불편한 감이 있네요.
HelloWorld()의 형태가 인자가 없고 리턴을 string 형태로 받게 되어 있지만
mfc 쪽에서 사용할때는 인자 형태의 포인터로 받게 되어 있으며 stringBSTR 형태로
 취환이 되어서 처리 되게 되어 있습니다.

아.. 이 내용은 대충 여기까지..
앞으로 작업 하면서 여러가지 문제점에 봉착할거 같은데요. 우선 세세하게 작업 내용들을 올리도록 할께요 ^^.
Posted by gsi
: