2009-03-14 1 views
3

않습니다 서버. 그러나 HttpWebRequest를 사용하는 경우 WCF는 내 게시물을 사용하고 올바르게 200으로 응답합니다. WCF 서비스를 호출하기 위해 Fiddler를 사용하여 요청을 성공적으로 작성할 수도 있습니다.WCF 포스트/WebRequest 클래스 작품 웹 클라이언트 내가 다음과 같이 WCF 서비스를 선언하지

웹 클라이언트 코드

WebClient webClient = new WebClient(); 
webClient.Headers.Add("Content-Type", "application/xml");//; charset=utf-8 
try 
{ 
    string result = webClient.UploadString("http://jeff-laptop/SalesAssist.ImageService/Process", "POST", data2); 
} 
    catch (Exception ex) 
{ 
    var e = ex.InnerException; 
} 

의 HttpWebRequest 코드

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://jeff-laptop/SalesAssist.ImageService/Process"); 
request.ContentType = "application/xml"; 
request.Method = "POST"; 
request.KeepAlive = true; 

using (Stream requestStream = request.GetRequestStream()) 
{ 
    var bytes = Encoding.UTF8.GetBytes(data2); 
    requestStream.Write(bytes, 0, bytes.Length); 
    requestStream.Close(); 
} 

var response = (HttpWebResponse)request.GetResponse(); 
var abc = new StreamReader(response.GetResponseStream()).ReadToEnd(); 

var data2 = @"<Product><Sku>3327</Sku><NameProduct</Name><Category>Bumper</Category><Brand Id='3'><Collection>14</Collection></Brand></Product>"; 

을 전송되는 XML 왜 HttpWebRequest를 작동 및 웹 클라이언트가 없다는 것입니다? Fiddler를 통해 보낸 헤더에 실제 차이점을 볼 수 없습니다.

+0

요소의 문자열에 특수 문자가 포함되어 있다고 생각합니다. 제품 이름에 "Comfort®"를 전달하면 HttpWebRequest를 사용하여 작동하지만 WebClient에서는 작동하지 않습니다. WebClient는 전송하기 전에 인코딩을 수행합니까? –

+1

다른 종류의 문제가 있었지만이 질문을 통해 제 코드를 수정할 기회를 얻었습니다. –

답변

4

문자열을 보내기 전에 WebClient에 Encoding 속성을 설정해보십시오. 당신이 그것을 지정하지 않으므로 나는 ASCII로 기본 설정되어 있다고 생각합니다. UploadString reference page에서 인용하십시오.

문자열을 업로드하기 전에,이 방법은 인코딩 속성에 지정된 인코딩을 사용 Byte 배열 로 변환한다. 이 메서드는 문자열이 전송되는 동안 을 차단합니다. 서버의 응답을 기다리는 동안 문자열을 보내고 을 계속 실행하려면 UploadStringAsync 메서드 중 하나를 사용하십시오.

관련 문제