아디봉의.net
WCF 활용하기 본문
첫번째 시간에 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 활용하기~~~ (TroubleSolver) |작성자 건강맘
'WCF' 카테고리의 다른 글
WCF Endpoint (0) | 2012.09.10 |
---|---|
HELLO WCF (0) | 2012.09.07 |