ü WCF Service의 개념
1. 닷넷의 여러 분산 기술들을 하나로 통합하여 SOA기반의 애플리케이션을 쉽게 개발해 줄 수 있게 지원해주는 기술이며, 기존의 복잡했던 각각의 개발 방식을 일관된 방식으로 프로그래밍할 수 있게 제공해줍니다.
2. 보안이나 트랜잭션과 같은 기능을 구현할 수 있는 높은 생산성을 제공해주고 있고, 기존의 닷넷 분산 기술과 웹 서비스 확장 스펙(WS-*)과의 높은 상호 운용성을 제공해 주고 있습니다. 즉, 닷넷 웹 서비스를 포함하여 좀 더 포괄적인 분산 기술을 지원한 닷넷 기술이라고 보시면 됩니다.
※ 참고 사이트
MSDN - WCF(Windows Communication Foundation) 서비스 구축
ü Silverlight에서 WCF Service를 사용하는 경우
1. DB에 접근할 때
- Silverlight에서는 .NET의 데이터 처리(DataSet)가 지원하지 않습니다. 웹 서비스 및 WCF 서비스를 통해 데이터를 가져와야 합니다.
2. 다른 플랫폼과 소통을 위한 경우
3. 기타 외부에서 필요한 인자를 읽어오려 할 때
ü Silverlight를 위한 WCF Service 만들기
1. WCF의 가장 기본이 되는 개념인 엔드포인트(EndPoint)의 개념
- WCF는 서비스와 클라이언트가 엔드포인트를 통해 메시지를 주고 받게 됩니다..
- 엔드포인트는 주소(Address), 바인딩(Binding), 계약(Contact) 3가지 요소로 구성되어 있습니다. 즉, 어디에서(Where) 무엇을(What) 어떻게(How) 통신할 것인지에 대한 개념입니다.
2. 웹사이트에 WCF Service 만들기 방법
- 새로 만들기에 웹사이트를 새로 만듭니다.
- WCF 서비스를 선택하고, 폴더 경로를 선택하여 프로젝트를 생성합니다.
- App_Code폴더에 IService.cs와 Service.cs 두개의 파일이 생성되어 있는 것을 볼 수 있으며, 파일에 작성되어 있는 샘플 코드를 지우고 아래와 같이 작성합니다.
Code
IService.cs [ServiceContract] public interface IService { [OperationContract] DateTime GetNowDate(); } Service.cs public class Service : IService { public DateTime GetNowDate() { return DateTime.Now; } } |
- Web.config을 열어보시면, EndPoint의 binding 속성을 basicHttpBinding으로 변경합니다.
Code
<!-- 중략 --> <system.serviceModel> <services> <service name="Service" behaviorConfiguration="ServiceBehavior"> <!-- Service Endpoints --> <endpoint address="" binding="basicHttpBinding" contract="IService"> <!-- 배포 시 다음 identity 요소는 배포된 서비스를 실행할 때 사용하는 ID를 반영하도록 제거되거나 대체되어야 합니다. 해당 요소가 제거되면 WCF에서는 적합한 ID를 자동으로 유추합니다. --> <identity> <dns value="localhost"/> </identity> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service> </services> <behaviors> <serviceBehaviors> <behavior name="ServiceBehavior"> <!-- 메타데이터 정보를 공개하지 않으려면 배포하기 전에 아래의 값을 false로 설정하고 위의 메타데이터 끝점을 제거하십시오. --> <serviceMetadata httpGetEnabled="true"/> <!-- 디버깅 목적으로 오류에서 예외 정보를 받으려면 아래의 값을 true로 설정하십시오. 예외 정보를 공개하지 않으려면 배포하기 전에 false로 설정하십시오. --> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration> |
Description
ð Silverlight는 Web에 종속된 기술이기 떄문에 기본적인 바인딩인 basicHttpBinding만 지원합니다.
- 컴파일 후, Service.svc 파일을 브라우저에서 보기 하면 다음과 같은 화면이 나타나며, 제대로 작동하고 있다는 것을 알 수 있습니다. 이 서비스는 WCF 서비스이자 웹 서비스라 할 수 있습니다.
3. Silverlight 에서 WCF Service 참조하기
- Silverlight 응용 프로그램을 선택한 후, 새 프로젝트를 추가합니다.
- WCF 서비스 프로젝트에서 결과를 확인할 수 있게 기존 웹 사이트에 연결합니다.
- Silverlight 응용 프로젝트가 생성이 되면, 프로젝트 참조 부분에 오른쪽 마우스를 눌러 서비스 참조를 선택합니다. (이하, ASP.NET에 웹 서비스 참조 하는 방식과 유사합니다.)
- 좀전에 Service.svc 의 URL를 주소에 넣고, 이동을 누르면 해당 서비스 목록이 나타나며, 서비스 네임스페이스명을 지정합니다.
- 서비스 참조된 것을 볼 수 있으며, 서비스 설정 파일(ServcieReferences.ClientConfig)이 생성된 것을 볼 수 있으며, ServcieReferences.ClientConfig 파일을 열어보면 WCF 서비스 설정이 생성된 것을 볼 수 있습니다.
Code
ServcieReferences.ClientConfig <configuration> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="BasicHttpBinding_IService" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> <security mode="None" /> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://localhost:8553/WCFService1/Service.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService" contract="WCFService.IService" name="BasicHttpBinding_IService" /> </client> </system.serviceModel> </configuration> |
ð basicHttpBinding은 전송수준에서의 보안이나 메시지자체의 보안기능은 제공하지만, 트랙젼선이나 세션과 같은 기능은 제공하지 않습니다.
4. WCF Service 호출하여 Silverlight에 데이터 결과를 보여주기
- Page.xaml 파일에 데이터를 받기 위한 텍스트블록 컨트롤을 추가하고, 페이지 로드시, 서비스 호출하여 화면에 보여줍니다.
Code
Page.xaml <TextBlock x:Name="txtDateNow"></TextBlock> Page.xaml.cs public partial class Page : UserControl { public Page() { InitializeComponent(); this.Loaded += new RoutedEventHandler(Page_Loaded); } void Page_Loaded(object sender, RoutedEventArgs e) { //WCF 서비스 객체 생성 WCFService.ServiceClient service = new WCFBinding.WCFService.ServiceClient(); //GetDateNow 메서드 결과를 리턴받는 이벤트 service.GetDateNowCompleted += new EventHandler<WCFBinding.WCFService.GetDateNowCompletedEventArgs>(service_GetDateNowCompleted); //비동기 호출 service.GetDateNowAsync(); } //서비스로부터 호출결과를 반환받을 경우 void service_GetDateNowCompleted(object sender, WCFBinding.WCFService.GetDateNowCompletedEventArgs e) { txtDateNow.Text = e.Result.ToShortDateString(); } } |
Result
'RIA Platform' 카테고리의 다른 글
WCF Service를 이용한 Silverlight 활용(3) (0) | 2009.06.29 |
---|---|
WCF Service를 이용한 Silverlight 활용(2) (0) | 2009.06.29 |
Silverlight 참고 사이트 (0) | 2009.06.29 |
Part8. Web Browser와 Silverlight (0) | 2009.06.29 |
Part7. Using Control Templates to Customize a Control's Look and Feel (0) | 2009.06.29 |