티스토리 뷰

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




TAG
, ,
댓글
  • 프로필사진 비밀댓글입니다 2018.11.05 15:51
  • 프로필사진 젠트 소스를 현재 가지고 있지 않아서... 위에 실행 파일을 디컴파일하셔서 보시면 될꺼 같습니다.

    디컴파일방법 : http://kjun.kr/360
    2018.11.05 21:10 신고
  • 프로필사진 비밀댓글입니다 2019.04.03 11:32
  • 프로필사진 젠트 WCF_RESTful_Test.exe 파일에 대한 소스코드를 말씀하시는건가요? 2019.04.03 11:41 신고
  • 프로필사진 비밀댓글입니다 2019.04.03 11:44
  • 프로필사진 젠트 exe파일을 위에 댓글의 디컴파일툴로 돌리면 바로 확인하실수 있는데요... 소스파일은 너무 오래되어서 있는지 확인해 봐야 할듯 합니다 ㅠ 2019.04.03 11:46 신고
  • 프로필사진 비밀댓글입니다 2019.04.03 16:50
  • 프로필사진 Apple 제가잘몰라서그러는데json형태로보낼때 db조회해서 하는건 웹서비스형태에 어긋나나요??ㅠㅠ대용량의 데이터를 보내려고하는건 어떻게하야하나요? 2019.05.22 08:05
  • 프로필사진 젠트 DB에서 조회된 데이터를 JSON으로 변환후 리턴하시면 됩니다. dataset to json 구글에서 검색해 보세요^^ 2019.05.22 09:12 신고
  • 프로필사진 Apple 아, DB 조회해서 JSON 형태로 웹서비스에 보내도 괜찮은거죠? 아 감사합니당~!
    저는 무조건 웹서비스와 연결해서 해야하는줄알았어용 ㅠㅠ 웹서비스에 대해 완벽히 이해를 못해서.. 감사합니당!
    2019.05.22 09:17
  • 프로필사진 젠트 리턴값이 string이면 json을 string으로 변환후 리턴하시면 됩니다 2019.05.22 11:51 신고
  • 프로필사진 비밀댓글입니다 2019.07.18 15:25
  • 프로필사진 젠트 삭제하신 부분이 하단의 name 속성(RESTfulTest.Service1Behavio)하고 연결되어 있는데요... 삭제후 정상적으로 작동 하시는지 테스트 해 보셔야 할듯 합니다. 저부분이 조금 중요하거든요...

    <endpointBehaviors>
    <behavior name="RESTfulTest.Service1Behavior">
    <webHttp/>
    </behavior>
    </endpointBehaviors>

    정확한 오류내용을 주셔야 확인이 가능할것 같습니다.
    2019.07.18 15:47 신고
댓글쓰기 폼