[C#/WCF] RESTful 웹서비스 만들기 (ASP.NET, JSON, POST)

WCF RESTful 웹서비스 만들기


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

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

 

 [소스파일] 

RESTfulTest.zip


 [웹서비스 테스트 유틸] 

WCF_RESTful_Test.exe


WCF_RESTful_Test_Src.zip



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로 넘기면 결과를 반환하는것을 확인할 수 있다.


 

댓글

Designed by JB FACTORY