|
|
WCF |
.NET 프레임 워크, WSE 를 이용하면 다른 운영체제에서 실행되는 클라이언트 애플리케이션과 웹서비스와 같이 상호작용하고 커뮤니케이션할 수 있는 웹서비스와 클라이언트 애플리케이션을 빨리 개발할 수가 있다. 그러면 왜 윈도우 커뮤니케이션 파운데이션(WCF)이 필요한걸까? 이미 살펴본 것처럼 웹서비스는 윈도우에서 분산 애플리케이션을 개발하는 데 사용되는 하나의 기술일 뿐이다. 다른 기술로는 이미 언급했던 엔터프라이즈 서비스와 .NET 프레임워크 리모팅이 있다. 또 다른 예로는 마이크로소프트 메시지 큐(MSMQ)를 들 수 있다. 윈도우 기반의 분산 애플리케이션을 만든다면 어떤 기술을 사용해야 할까? 나중에 이것을 바꿔야 한다면 얼마나 어려울까? WCF의 목적은 서비스와 애플리케이션을 연결하기 위한 기법에 독립적인 애플리케이션을 만들 수 있게 이 다양한 기술들을 통합적으로 적용할 수 있는 프로그래밍 모델을 제공하는 것이다. 사실 매우 어려운 부분이지만 불가능한 것은 아니다. 애플리케이션의 프로그램 구조와 서비스의 커뮤니케이션 인프라 스트럭처는 완전히 다르다. 그러나 WCF는 이를 많은 기술과도 호환이 가능하다. 요약하자면 마이크로소프트 윈도우를 위한 분산 애플리케이션이나 서비스를 개발하려 한다면 WCF를 사용해야만 한다. |
웹 서비스 만들기. |
가장 먼저 SilverLight 를 설치해줍니다. 저는 기본적으로 Silverlight 4를 사용하겠습니다. SilverLight 는 현재 게시하는 시간을 기준으로 SilverLight 5 Beta 버전 까지 나왔으며 Silverlight4 부터는 Visual Studio 2010 버전부터 사용하실 수 있습니다. Silverlight4는 같이 첨부하겠습니다.
먼저 Silverlight 응용 프로그램을 선택해줍니다.
새 웹 프로젝트 형식은 새 웹 사이트로 해주시고요. 버전은 Silverlight4로 하겠습니다.
Silverlight 프로젝트를 생성하게ㅔ 되면 WPF 폼과 웹이 두개가 생성되는대 웹 부분에서 WCF서비스를 추가해줍니다.
WCF 서비스를 추가하게 되면 위와 같이 ISimpleSVC, SimpleSVC 두개가 추가가 되는데 ISimpleSVC 는 해당 인터페이스 노출을 담당하고 있으며 이부분에 함수를 추가를 하고 그다음 SimpleSVC 에 해당 코드를 작성해 주시면 됩니다. 저는 HelloWorld 함수를 만들어 줬습니다. SimpleSVC 코드 부분이다.
WCF서비스를 만들고 난 뒤 WPF 폼에서 클라이언트에서 서비스 참조 추가를 눌러주면 위와 같은 마법사가 뜹니다. 여기서 검색을 누르면 웹에서 했던 WCF 서비스가 검색이 됩니다.
위와 같이 뜨게 되면 해당 서비스의 네임스페이스를 지정해줘서 사용합니다.
자 이제 간단한 WPF XAML 코드와 비하인드 코드부분을 보겠습니다. 어려울 것 없습니다.
<StackPanel x:Name="LayoutRoot" Background="White"> <TextBox x:Name="inputBox"/> <TextBlock x:Name="outputBox"/> <Button Name="inputbtn" Content="Button" Click="inputbtn_Click"/> </StackPanel> StackPanel 안에 TextBox 와 TextBlock 와 Button 3개의 컨트롤을 추가해주시고요.
버튼에 클릭 이벤트를 등록해줍니다. private void inputbtn_Click(object sender, RoutedEventArgs e) { WCSsample.SimpleSVCClient SVC = new WCSsample.SimpleSVCClient(); SVC.HelloWorldCompleted += new EventHandler<WCSsample.HelloWorldCompletedEventArgs>(SVC_HelloWorldCompleted); SVC.HelloWorldAsync(inputBox.Text); } 그 다음 위와 같은 비하인드 코드를 작성해 주시는데요. 이 버튼은 해당 웹에서 WCF서비스 게시한 것을 쓸것입니다. 아까 서비스 참조 추가한 namespace 명에서 해당 서비스의 Client에 대한 개체를 생성하고 해당 서비스가 Completed 된 이벤트를 추가해줍니다. 해당 이벤트가 추가되면 Async를 통해 해당 이벤트를 사용합니다.
void SVC_HelloWorldCompleted(object sender, WCSsample.HelloWorldCompletedEventArgs e) { outputBox.Text = e.Result; } 이벤트 부분은 해당 이벤트 결과를 받게 되면 outputBox.Text 에 해당 결과를 나타내주면 됩니다.
<실행 화면> |
Localhost 가 아닌 자신의 IP로 바꾸기 |
Localhost 가 아닌 자신의 IP로 바꾸기 부분은 어렵지 않습니다. 프로젝트를 만들 시에 WCF응용 프로그램으로 만들어주시고 Silverlight 를 추가해주셔서 WCF응용 프로그램에 연동을 시켜주시면 프롬퍼티 속성이 나옵니다. 해당 프롬 퍼티 속성에서 웹 부분을 누르시면 위와 같은 그림이 나옵니다. 당연히 게시를 하기 위해선 IIS 가 있어야 겠지요??
여기서 한가지! Localhost 는 잘되는대 자신의 IP 를 쓰게 되면 자꾸 오류가 나시는 분들이 계실지도 있으실 수 있습니다. 그럴 때는 .NET Framework 가 잘못 설치되서 그러는 건대요 그럴 때는 해결책이 있습니다. C드라이브 -> Windows -> Microsoft.NET -> Framework -> v4.030319 -> aspnet_regiis.exe
해당 파일이 있는대 이 파일을 실행 -> cmd 콘솔 창을 뛰어서 Aspnet_regiis.exe /iru 를 입력해서 실행을 시켜줍니다. |
참고 자료 |
사이트 –cafe.daum.net/smbitpro (선문 비트 카페) |
|