WCF RESTful 웹서비스 만들기
WCF로 RESTful 형식의 웹서비스를 만들어보자. .NET Framework 3.5부터 WCF를 지원하고 있다.
URL로 인자를 보내는 GET 방식과 JSON으로 인자를 보내는 POST 방식에 대한 간단한 예제이다.
[소스파일]
[웹서비스 테스트 유틸]
WCF Service Application 프로젝트를 생성한다.
프로젝트를 생성하면 GetData(), GetDataUsingDataContract() 두개의 함수가 기본으로 만들어져 있다.
RESTful 웹서비스를 만들기위해 Web.config 파일을 수정해 주어야 한다.
<services> <service name="RESTfulTest.Service1" behaviorConfiguration="RESTfulTest.Service1Behavior"> <endpoint address="" behaviorConfiguration="RESTfulTest.Service1Behavior" binding="webHttpBinding" contract="RESTfulTest.IService1"> </endpoint> </service> </services> <endpointBehaviors> <behavior name="RESTfulTest.Service1Behavior"> <webHttp/> </behavior> </endpointBehaviors>
IService1.cs 파일의 [OperationContract] 부분을 수정한다.
WebGet, UriTemplate을 사용하여 URL을 통하여 인자를 받을수 있도록 수정한다.
[OperationContract] [WebGet(UriTemplate = "GetData/{value}")] string GetData(string value);
Service1.svc.cs 파일의 GetData() 함수 인자 타입을 string으로 변경한다.
Service1.svc 파일을 브라우저에서 보기를 하면 웹서비스가 실행된다.
http://localhost:2877/Service1.svc/GetData/1 URL에 함수와 인자를 넣어주면 결과가 반환된다.
string이 아니라 JSON 객체를 반환 하도록 바꿔보자.
[DataContract] Member 클래스를 생성한다.
GetData() 함수를 반환 유형을 Member로 변경한다.
[OperationContract] [WebGet(UriTemplate = "GetData/{value}")] Member GetData(string value); [DataContract] public class Member { [DataMember(Order = 0)] public string name { get; set; } [DataMember(Order = 1)] public int age { get; set; } }
Service1.svc.cs 파일에서 GetData() 함수 반환 유형을 Member로 변경하고
Member 객체에 값을 할당 한다.
public Member GetData(string name) { Member member = new Member(); member.name = name; member.age = 25; return member; }
http://localhost:2877/Service1.svc/GetData/CHOE 결과가 JSON이 아니라 XML로 반환 된다.
ResponseFormat을 JSON으로 변경한다.
[OperationContract] [WebGet(UriTemplate = "GetData", ResponseFormat = WebMessageFormat.Json)] Member GetData(string name);
JSON으로 결과가 반환되는것을 확인할 수 있다.
POST 방식으로 인자를 전달하는 방법으로 변경해 보자.
POST 방식은 WebGet대신 WebInvoke를 사용해야 한다.
Method, BodyStyle, RequestFormat 항목을 추가한다.
[OperationContract] [WebInvoke(UriTemplate = "GetData", Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] Member GetData(string name);
테스트 프로그램으로 인자를 POST로 넘기면 결과를 반환하는것을 확인할 수 있다.