0

il n'y a pas si longtemps, j'ai créé une petite application iPhone pour mon utilisation quotidienne. Maintenant, je veux porter cette application sur un appareil Windows Mobile en utilisant C# et le Compact Framework. Mais je n'ai vraiment aucune idée de comment utiliser le HttpWebRequest et le msdn ne m'aide pas non plus. Je pense que j'ai un retard de compréhension sur la façon dont les demandes Web fonctionnent en général.Besoin d'aide avec HttpWebRequest sur un projet Compact Framework

Dans l'application iPhone J'ai le code de lignes suivantes:

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]; 

Le Webservice n'a pas wsdl donc je dois utiliser le HttpWebRquest objet dans .Net CF. Ce que je n'ai pas obtenu, c'est où placer le corps (le long XML) dans ma demande?

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

J'ai commencé cette façon, est la première ligne possèdent une manière HttpWebRequest et pour le corps XML que je dois créer anotherone ?! Comment l'utiliser correctement, comment l'envoyer? Désolé si cela peut être normaly totalement facile mais je ne comprends vraiment pas. J'ai cherché sur le web, 2 livres et le msdn mais dans chaque tutoriel est seulement un Webrequest avec une URL mais sans un corps.

Merci

twickl

Répondre

2

Vous devez écrire les données POST à ​​la request stream.

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

Obtenez le flux de demande à l'aide

Stream requestStream = req.GetRequestStream(); 

Ensuite, écrire vos données XML au flux, en prenant soin de coder votre texte. N'oubliez pas de fermer le flux pour vous assurer que toutes vos données sont envoyées.

requestStream.Close(); 
+0

Si le flux est en utilisant, il doit obtenir rincée et fermé à la fin de celui-ci. – Jerther

0

Attention, s'il n'y a pas de données à écrire dans le flux, le ContentLength serait 0, mais curieusement vous devez toujours Dispose() le RequestStream même si vous n'écrivez pas quoi que ce soit !!!

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

Ce problème se produit uniquement dans Compact Framework.

Je veux que mes 8 heures en arrière, et mes cheveux aussi ...

Questions connexes