2010-02-01 1 views
2

이 httpWebRequest 문제가 발생했습니다. XML을 웹 사이트에 보내야합니다. 그러나 나는 나의 요청에 부정적 반응을 계속하고있다. ContentLength가 설정된 몇 가지 코드 예제를 보았습니다. 그게 문제가 될 수 있지만 잘 모르겠습니다 ....스트림 및 XmlTextwriter .... 요청을 올바르게 수신하지 못했습니다.

XML은 writePaymentRequest (...)로 작성된 웹 사이트가 필요로하는 것과 똑같습니다. 왜냐하면 그들은 내 XML 마크 업을 얻었 기 때문에 그들은 다른 프로그래밍 언어로 성공했다. 결과에는 내가받는 정보 대신 오류 만 포함됩니다.

writer에 요청 스트림이있는 길이를 모르기 때문에 contentlength를 설정할 수 없습니다. 당신이 먼저 MemoryStream을 같이 뭔가 XmlTextWriter에 쓴 경우

HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create("https://some.website.com"); 
httpWebRequest.Method = "POST"; 
httpWebRequest.ContentType = "application/x-www-form-urlencoded"; 

using (writer = new XmlTextWriter(httpWebRequest.GetRequestStream(), System.Text.Encoding.UTF8)) 
{ 
writePaymentRequest(writer, registrant, amount, signature, ipaddress); 
} 

HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream()); 
String stringResult = streamReader.ReadToEnd(); 
streamReader.Close(); 

답변

4

당신은 길이를 알 것입니다. 여기에서, 당신은, 바이트를 얻을 수 바이트 배열의 길이에 httpWebRequest.ContentLength을 설정 한 다음 요청

편집

에 바이트 배열을 쓰기 보일 것입니다 코드의 중간 이런 식으로 (생각) :

MemoryStream ms = new MemoryStream(); 
    using (writer = new XmlTextWriter(ms, System.Text.Encoding.UTF8)) 
    { 
     writePaymentRequest(writer, registrant, amount, signature, ipaddress); 
    } 
    byte[] bytes = ms.ToArray(); 
    ms.Close(); 
    httpWebRequest.GetRequestStream().Write(bytes, 0, bytes.Length); 
    httpWebRequest.ContentLength = bytes.Length; 

편집 # 2

대신 XmlTextWriter(ms, System.Text.Encoding.UTF8)의가에 XmlTextWriter(ms, new UTF8Encoding(false)) 시도 그게 인코딩 문제를 해결하는지 확인하십시오

+0

이 작동하지 않습니다. 불행히도 같은 오류가 발생합니다. 요청 시작시 bytearray에 3 개의 물음표가 표시됩니다 (문자열로 변환 됨). 이게 뭔가있을 수 있니? 아마도 간단한 수정 일 것입니다 ... XML 기반 오류 메시지를 제공하기 때문에 연결이 작동합니다. – Rickjaah

+0

인코딩 문제와 같은 소리가납니다 ... 도움이되는지 확인하기 위해 답을 수정하겠습니다. – John

+0

방금 ​​웹 사이트에서 단어를 들었습니다 ... 첫 번째 줄만 받음 ... 요청을 푸시하는 중 ... – Rickjaah