아디봉의.net

WCF 활용하기 본문

WCF

WCF 활용하기

아디봉 2012. 9. 7. 13:31

첫번째 시간에 WCF를 만드는 방법에 대해서 이야기 했습니다.

하지만 만들기만 하고 활용을 못하면 소용이 없겠죠.....

 

그래서 이번시간에는 Web page에서 활용하는 방법에 대해서 말씀드리겠습니다.

일단 서비스 게시된 WCF를 사용하려면 Service참조가 필요합니다.

 

참 그런데 한가지 말씀 못드린게 있네요... WCF를 프로젝트로 만들면 기본적으로 Web.config파일이 생깁니다.

더블클릭해서 보시면 맨 아래에

  <system.serviceModel>
이라고 시작되는 부분이 있습니다.

여기에 <endpoint ~~ 로 시작되는 부분에 기본적으로 binding="wsHttpBinding" 이라고 되어 있는데

이걸 binding="basicHttpBinding" 로 바꿔주세요....

그리고 나서 저장을 누른 다음에

다시 웹프로젝트로 가셔서 .... 프로젝트 선택 후 오른 쪽 버튼 누르면.... 서비스참조추가 라는게 있습니다.

그럼 이걸 선택 해 주세요...

그럼 아래와 같은 화면이 나오는데 왼쪽에 검색버튼을 누르면 사용가능 한 서비스가 검색됩니다.

 

필요로 하는 서비스를 선택하시고 네임스페이스를 알아서(?) 주시고 확인을 누르시면 서비스가 참조되어

사용가능하게 됩니다.

참조된 서비스를 선택하고 모든파일보기를 눌러보시면 .wsdl,.disc,.xsd 파일 들도 보실 수 있습니다.

 

그럼 이제 WCF를 호출해 볼까요..

화면에 버튼을 하나 놓으시고 버튼을 눌렀을 때 데이타를 호출해 보죠...

여기서 버튼이란 일반웹페이지의 버튼을 말한다. asp.net 이나 이런 웹페이지만드는 것으로 작업하기 바란다.

 

        private void btnHellow_Click(object sender, RoutedEventArgs e)
        {

            // XamlService 은 위에서 설정한 웹서비스 참조 Namespace입니다.

           // WCF로 서비를 만들고 웹서비스 참조를 하면 접속 할 수 있게 Client라는게 생깁니다.

           // 바로 이렇게요.. Service1Client  이것으로 연결 점을 만들고 
            XamlService.Service1Client proxy = new HellowWorld.XamlService.Service1Client();

           // 연결점을 만들고 나서 .을 찍으면 끝에 이런 "UsingDataContractCompleted" 문자가 붙은 것을

           // 볼수 있는데 이것으로 이벤트를 만들어서 값을 리턴 받습니다.
            proxy.GetDataUsingDataContractCompleted += new EventHandler<HellowWorld.XamlService.GetDataUsingDataContractCompletedEventArgs>(proxy_GetDataUsingDataContractCompleted);

            // 여기는 complex type을 사용했기 때문에 정의해 주는 부분입니다.
            XamlService.CompositeType helCom = new HellowWorld.XamlService.CompositeType();
            helCom.BoolValue = true;

            // Async메서드를 호출 합니다.
            proxy.GetDataUsingDataContractAsync(helCom);

            // 연결을 반드시 닫아 줍니다.
            proxy.CloseAsync();

        }

// 위에서 생성한 이벤트를 처리 하는 부분 입니다.

        void proxy_GetDataUsingDataContractCompleted(object sender, HellowWorld.XamlService.GetDataUsingDataContractCompletedEventArgs e)
        {
            // Complex Type으로 결과를 반환 합니다.
            XamlService.CompositeType retCom = e.Result;

            // 버튼에 반환 된 값을 로드합니다.
            btnHellow.Content = retCom.StringValue.ToString();
        }

 

이렇게 해서 웹에서 사용하는 방법을 배웠습니다.

그런데 ... 이렇게만 하면 ~~~ 에러 납니다. ..^^

그건 프로젝트가 분리되었기 때문에 즉, 일반적으로 사용하는 경우

서비스 도메인과 웹 도메인이 틀리기 때문에 발생합니다.

 

우선 이 에러를 없애고 실행하기 위해서

WCF 프로젝트에

새아이템 에서 xml파일을 추가하고

이름을 clientaccesspolicy.xml라고 합니다.

그리고 xml파일의 내용을 아래와 같이 만듭니다.

 

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>


위에 것은 cross-domain-access-policy에 관한 것입니다.

자세한 내용은 다음에 다루도록 하겠습니다.

 

그럼 실행해서 멋진 WCF 서비스의 값을 받아 보세요...

'WCF' 카테고리의 다른 글

WCF Endpoint  (0) 2012.09.10
HELLO WCF  (0) 2012.09.07