[WCF-Rest] WCF-Rest를 이용한 동기식 SOAP Receiver

2009. 12. 4. 14:07WEB/WebService

1. 제안내용

    • 노출된 Endpoint(Uri)를 통해 SOAP 메시지를 수신할 수 있는 서버 구축

      • WCF를 사용

      • 메시지에 대한 수신 및 응답

      • Post를 이용해 동기식 메시지 응답

    2. 진행사항

    1. REST는 잘 정의된 URI를 통해서 임의의 Object를 표현하는 방식이며, HTTP Verbs 즉, GET(fetch), PUT(update/insert or Append), DELETE를 통해 Object를 얻을 수 있음

    2. ASP.NET Web Application Project를 VS 2008을 이용해서 만들고, add item에 New item하여, WCF Service를 추가

    3. WebGet property는 HTTP Verb의 HTTP GET 방식이며, Representation Format은 XML이나, JSON을 지원하는 데, Xml format을 설정

    4. WebGet은 URI를 이용해 자원을 사용하므로 사용에 제한이 있음 - > WebInvoke 를 사용해 해결

    5. WebInvoke propert는 HTTP Verb의 나머지 PUT, DELETE를 통해 Object를 사용 (HTTP Post 방식 사용)

         1: /// <summary>
         2:         /// 세금계산서 제출 후 응답메시지 수신 및 수신확인 메시지 전송
         3:         /// </summary>
         4:         /// <param name="_ResponseMessage">응답메시지</param>
         5:         [OperationContract]
         6:         [WebInvoke(UriTemplate = "/", Method = "POST", 
         7:                    RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml)]
         8:         string ResponseMessage(ResponseMessage _ResponseMessage);
      • UriTemplate: 자원 접근을 위한 경로

      • Method: 서비스 작업이 응답하는 프로토콜(예: HTTP) 메서드를 가져오고 설정

     

      6. 응답 메시지 수신 및 응답

       1: public string ResponseMessage(ResponseMessage _ResponseMessage)
       2: {
       3:     try
       4:     {
       5:         File.WriteAllText(HttpContext.Current.Server.MapPath
       6: xTest/SoapReceiverTest/" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt"), _ResponseMessage.soapEnvelope.OuterXml);
       7:         
       8:         return "메시지가 성공적으로 전송되었습니다. 결과는 익일 확인하실 수 있습니다.“;                
       9:     }
      10:     catch (Exception ex)
      11:     {
      12:         return "";
      13:     }
      14: }

      7. REST 서비스를 위한 Web.config 설정(webHttpBinding과 endpoint Behavior로써 webHttp를 지원하도록 Config에 설정)

     

      8. Http POST를 이용해 웹 서비스 동기 식 요청 및 응답

       1: // 1. 웹 서비스 요청
       2: HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(_Url);
       3:  
       4: httpWebRequest.ContentType = "text/xml; charset=\"utf-8\"";
       5:  
       6: httpWebRequest.Method = "POST";
       7:  
       8: byte[] envelopeBytes = System.Text.Encoding.UTF8.GetBytes(_Envelope);
       9:  
      10: httpWebRequest.ContentLength = envelopeBytes.Length;
      11:  
      12: // 문자-> Byte 변환
      13: Stream requestStream = httpWebRequest.GetRequestStream();
      14:  
      15: requestStream.Write(envelopeBytes, 0, envelopeBytes.Length);
      16:  
      17: requestStream.Flush();
      18:  
      19: requestStream.Close();
      20:  
      21: // 2. 웹 서비스 요청 결과 응답
      22: WebResponse webResponse = httpWebRequest.GetResponse();
      23:  
      24: Stream responseStream = webResponse.GetResponseStream();
      25: StreamReader responseReader = new StreamReader(responseStream);
      26:  
      27: string responseString = responseReader.ReadToEnd();               
      28:  
      29: webResponse.Close();

     

    3. 결과사항

     

    image

    Post 방식으로 웹 서비스 호출 및 동기 식 응답메시지 수신

    image