0

저는 매일 사용하기 위해 작은 아이폰 앱을 만들지 않았습니다. 이제 C#과 Compact Framework를 사용하면서이 앱을 Windows Mobile Device로 포팅하고 싶습니다. 그러나 나는 HttpWebRequest를 사용하는 방법에 대한 실마리가 없으며 msdn은 나를 도울 수 없다. 웹 요청이 일반적으로 어떻게 작동하는지에 대한 이해가 늦었습니다. 아이폰 응용 프로그램에서 Compact Framework 프로젝트의 HttpWebRequest에 대한 도움이 필요하십니까

나는 다음 줄의 코드가 : WebService에 내가 닷넷 (CF)의 HttpWebRquest 객체를 사용할 필요가 그래서 WSDL이 없습니다

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://xxx:[email protected]/RPC2"]]; 
[theRequest setHTTPMethod:@"POST"]; 
[theRequest addValue:@"text/xml" forHTTPHeaderField:@"content-type"]; 
[theRequest setCachePolicy:NSURLCacheStorageNotAllowed]; 
[theRequest setTimeoutInterval:5.0]; 
NSString* pStr = [[NSString alloc] initWithFormat:@"<?xml version=\"1.0\" encoding=\"UTF-8\"?><methodCall><methodName>xxx.SessionInitiate</methodName><params><param><value><struct><member><name>LocalUri</name><value><string></string></value></member><member><name>RemoteUri</name><value><string>xxxx</string></value></member><member><name>TOS</name><value><string>text</string></value></member><member><name>Content</name><value><string>%@</string></value></member><member><name>Schedule</name><value><string></string></value></member></struct></value></param></params></methodCall>", number.text, TextView.text]; 
NSData* pBody = [pStr dataUsingEncoding:NSUTF8StringEncoding]; 
[theRequest setHTTPBody:pBody]; 
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

을 내가 얻지 못한 것은 내 요청에 Body (긴 XML)를 넣을 위치입니까? 나는이 방법을 시작

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"https://xxx:[email protected]/RPC2"); 
req.Method = @"POST"; 
req.ContentType = @"test/xml"; 
req.Timeout = 5; 

은 첫 번째 줄의 키우면는 HttpWebRequest를 소유하고 내가 anotherone을 만들 수있는 XML의 몸입니다! 올바르게 사용하려면 어떻게 보내면됩니까? 죄송합니다. 이것이 일반적으로 쉽지는 않을지 모르겠지만, 실제로 그것을 얻지는 못합니다. 필자는 웹, 2 권의 책 및 msdn을 검색했지만 모든 자습서에서는 URL이 있지만 본문이없는 웹 요청 만 표시됩니다.

twickl

답변

2

request stream에 POST 데이터를 작성해야합니다. 스트림에 쓸 데이터가 존재하지 않는 경우는

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"https://username:[email protected]/RPC2"); 
req.Method = "POST"; 
req.ContentType = "test/xml"; 
req.Timeout = 5; 
using (Stream stream = req.GetRequestStream()) 
using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8)) 
{ 
    writer.Write("PUT THE XML HERE"); 
} 

using (StreamReader reader = req.GetResponse().GetResponseStream()) 
{ 
    string result = reader.ReadToEnd(); 
} 
1

텍스트를 인코딩 돌보는,

Stream requestStream = req.GetRequestStream(); 

그런 다음 스트림에 XML 데이터를 쓰기 사용하여 요청 스트림을 가져 주셔서 감사합니다.

모든 데이터가 전송되도록 스트림을 닫는 것을 잊지 마십시오.

requestStream.Close(); 
+0

스트림이 사용중인 경우, 그것은 플러시 및 그것의 끝에서 폐쇄해야한다. – Jerther

0

가, 조심의 ContentLength은 0이 될 것입니다하지만 이상하게 당신은 여전히 ​​당신이 그것에 아무것도 기록하지 않는 경우에도 RequestStream을 Dispose()합니다!

req.ContentLength = 0; 
req.GetRequestStream().Dispose(); 

이 문제는 Compact Framework에서만 발생합니다.

나는 다시 내 8 시간 원하고, 너무 내 머리 ...

관련 문제