2011-03-27 3 views
2

내 WCF 서비스에서 수신되는 HTTP POST 요청 내에서 데이터를 가져 오는 방법은 무엇입니까?HTTP POST 데이터 추출 (WCF C#)

은 내가 HTTP POST를 사용하여 다른 서비스에서 데이터를 보낼 :

 string ReportText = "Hello world"; 

     ASCIIEncoding encoding = new ASCIIEncoding(); 
     byte[] data = encoding.GetBytes(ReportText); 

     // Prepare web request... 
     String serverURL = ConfigurationManager.AppSettings["REPORT"]; 
     HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(serverURL); 
     myRequest.Method = "POST"; 
     myRequest.ContentType = "application/x-www-form-urlencoded"; 
     myRequest.ContentLength = data.Length; 
     Stream newStream = myRequest.GetRequestStream(); 

     // Send the data. 
     newStream.Write(data, 0, data.Length); 
     newStream.Close(); 

하지만 내가 WCF에서 POST 요청을받을 때 내가 WebOperationContext.Current.IncomingRequest, 를 사용하여 추출 할 수있는 방법을 찾을 수 없습니다 어떻게 HTTP POST 요청에서 데이터를 추출합니까?

+0

당신이 당신의 WCF 서비스에서'을 application/x-www-form-urlencoded'을 지원하기 위해 사용하는 바인딩 무엇? –

+0

서비스 코드의 모습을 게시 할 수 있습니까? 실제로 WCF에 연결하는 것처럼 보이지는 않지만 표준 HTTP 요청 만하는 것입니다. – Tridus

+0

@tridus - POST 요청을 보내는 클라이언트는 WCF가 아닌 표준 HTTP POST로 전송합니다. 어떻게 위의 예제처럼 보낸 POST 데이터를 내 WCF에서 추출 할 수 있습니까? (링크, 코드 예제 ...) – Rodniko

답변

0

Hello world은 정확히 application/x-www-form-urlencoded이 아닙니다. 게시 메시지 본문을 적절하게 인코딩하려면 someproperty=Hello%20world WCF HTTP 바인딩을 사용해야합니다.

+0

감사합니다. 좀 더 설명해 주시겠습니까? 코드 예제가 있습니까? ... – Rodniko

-2

WCF를 사용하지 않으므로 이것은 WCF 질문이 아닙니다. 당신이 정말로하고있는 것은 HTTP Post를 사용하여 양식을 제출하는 것이며,이를 수신하고 처리 할 웹 페이지를 만들어야합니다. Request.Form 콜렉션을 사용하여이를 수행 할 수 있습니다.

다음은 간단한 예제이다 http://bytes.com/topic/asp-net/answers/655226-how-use-request-form

5

내 생각 엔 당신이 WCF REST 서비스를 사용하고 GET 매개 변수를 뽑을 수 있지만 RAW POST 데이터를 읽을 수 있다는 것입니다?

이 경우 계약 선언의 매개 변수 목록 끝에 Stream 매개 변수를 추가하십시오. 함수의 끝 부분에 단일 스트림이 있으면 프레임 워크는이 스트림을 원시 데이터 스트림으로 처리합니다.

  [OperationContract] 
      [WebInvoke(Method = "POST", UriTemplate = "DoSomething?siteId={siteId}&configTarget={configTarget}", 
      RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] 
      bool DoSomething(string itemid, Stream body); 


    public bool DoSomething(int siteId, string configTarget, Stream postData) 
    { 
     string data = new StreamReader(postData).ReadToEnd(); 
     return data.Length > 0; 
    } 

은 자세한 내용은이 링크를 참조하십시오 : http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-receiving-arbitrary-data.aspx

+0

제임스에게 감사드립니다. 내 게시물이 내 문제를 해결하는 데 도움이되었습니다. 난 Rest WCF 서비스를 만들려고했는데, 'application/x-www-form-urlencoded'라는 컨텐트 유형과 'key = value & key = value .....'와 같이 요청 본문에 데이터가 게시됩니다. 내 응용 프로그램을 제 3 자 서비스 (이러한 모든 사양으로 내 서비스를 호출 할 예정)와 통합하기 위해이 구조를 준비하려면 많은 어려움을 겪고있었습니다. – Shaggy