https://gent.tistory.com/146

WCF RESTful 웹서비스 만들기

WCF로 RESTful 형식의 웹서비스를 만들어보자. .NET Framework 3.5부터 WCF를 지원하고 있다.

URL로 인자를 보내는 GET 방식과 JSON으로 인자를 보내는 POST 방식에 대한 간단한 예제이다.

[소스파일]

RESTfulTest.zip

[웹서비스 테스트 유틸]

WCF_RESTful_Test.exe

WCF Service Application 프로젝트를 생성한다.

프로젝트를 생성하면 GetData(), GetDataUsingDataContract() 두개의 함수가 기본으로 만들어져 있다.

RESTful 웹서비스를 만들기위해 Web.config 파일을 수정해 주어야 한다.

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을 통하여 인자를 받을수 있도록 수정한다.

IService1.cs

[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로 변경한다.

IService1.cs

[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 객체에 값을 할당 한다.

Service1.svc.cs

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으로 변경한다.

IService1.cs

[OperationContract]
[WebGet(UriTemplate = "GetData",
ResponseFormat = WebMessageFormat.Json)]
Member GetData(string name);

JSON으로 결과가 반환되는것을 확인할 수 있다.

POST 방식으로 인자를 전달하는 방법으로 변경해 보자.

POST 방식은 WebGet대신 WebInvoke를 사용해야 한다.

Method, BodyStyle, RequestFormat 항목을 추가한다.

IService1.cs

[OperationContract]
[WebInvoke(UriTemplate = "GetData",
Method = "POST",
BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
Member GetData(string name);

테스트 프로그램으로 인자를 POST로 넘기면 결과를 반환하는것을 확인할 수 있다.