繁体   English   中英

在Compact Framework项目上需要HttpWebRequest的帮助

[英]Need help with HttpWebRequest on a Compact Framework Project

不久前,我创建了一个小型的iPhone应用程序供我日常使用。 现在,我想在使用C#和Compact Framework的同时将此应用程序移植到Windows Mobile设备。 但是我真的不知道如何使用HttpWebRequest,msdn也没有帮助。 我认为我对Web请求的总体工作方式了解不足。

在iPhone应用程序中,我有以下几行代码:

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://xxx:xxx@api.test.net/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];

Web服务没有wsdl,因此我必须在.Net CF中使用HttpWebRquest对象。 我没有得到的是,将正文(长XML)放在我的请求中的什么位置?

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"https://xxx:xxx@api.xxx.net/RPC2");
req.Method = @"POST";
req.ContentType = @"test/xml";
req.Timeout = 5;

我以这种方式开始,第一行是它自己的HttpWebRequest,对于XML主体,我必须创建另一个人吗? 如何正确使用它,如何发送? 抱歉,这通常很容易,但是我真的不明白。 我搜索了网络,2本书和msdn,但是在每个教程中,只有一个带有URL却没有正文的Webrequest。

谢谢

wick

您需要将POST数据写入请求流

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"https://username:password@api.sipgate.net/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();
}

使用获取请求流

Stream requestStream = req.GetRequestStream();

然后将您的xml数据写入流中,注意对文本进行编码。

不要忘记关闭流以确保发送所有数据。

requestStream.Close();

注意,如果没有数据要写入流,则ContentLength将为0,但是奇怪的是,即使您不向其中写入任何内容,您仍然需要Dispose() RequestStream!

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

仅在Compact Framework中会发生此问题。

我希望我的8小时回来了,我的头发太...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM