带有xml请求消息的C#WP8异步HttpWebRequest Post
我在这里读了很长一段时间,但在这种情况下,我没有得到任何进一步。 我对Windows Phone开发相当陌生,面临以下问题 如果我必须发布一条xml请求消息,我将调用一个Web服务。我已经让代码在常规c#中工作(请参见下面的代码) 但是对于WindowsPhone(8)开发,它需要是异步的。在搜索web并尝试此处提供的各种示例后,我得到了以下代码:带有xml请求消息的C#WP8异步HttpWebRequest Post,c#,.net,windows-phone-8,httpwebrequest,async-await,C#,.net,Windows Phone 8,Httpwebrequest,Async Await,我在这里读了很长一段时间,但在这种情况下,我没有得到任何进一步。 我对Windows Phone开发相当陌生,面临以下问题 如果我必须发布一条xml请求消息,我将调用一个Web服务。我已经让代码在常规c#中工作(请参见下面的代码) 但是对于WindowsPhone(8)开发,它需要是异步的。在搜索web并尝试此处提供的各种示例后,我得到了以下代码: private async void DoCallWS() { string url = "<my_url>";
private async void DoCallWS()
{
string url = "<my_url>";
// HTTP web request
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "text/xml";
httpWebRequest.Method = "POST";
// Write the request Asynchronously
using (var stream = await Task.Factory.FromAsync<Stream>(httpWebRequest.BeginGetRequestStream,
httpWebRequest.EndGetRequestStream, null))
{
string requestXml = "<my_request_xml>";
// convert request to byte array
byte[] requestAsBytes = Encoding.UTF8.GetBytes(requestXml);
// Write the bytes to the stream
await stream.WriteAsync(requestAsBytes , 0, requestAsBytes .Length);
stream.Position = 0;
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
//return reader.ReadToEnd();
string result = reader.ReadToEnd();
}
}
}
private异步void DoCallWS()
{
字符串url=“”;
//HTTP web请求
var httpWebRequest=(httpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType=“text/xml”;
httpWebRequest.Method=“POST”;
//异步写入请求
使用(var stream=await Task.Factory.fromsync(httpWebRequest.BeginGetRequestStream,
httpWebRequest.EndGetRequestStream,空)
{
字符串requestXml=“”;
//将请求转换为字节数组
byte[]requestAsBytes=Encoding.UTF8.GetBytes(requestXml);
//将字节写入流
wait stream.WriteAsync(requestAsBytes,0,requestAsBytes.Length);
流位置=0;
使用(StreamReader=newstreamreader(stream,Encoding.UTF8))
{
//返回reader.ReadToEnd();
字符串结果=reader.ReadToEnd();
}
}
}
字符串结果具有我试图发送的请求xml消息的值
我知道异步void方法不是首选方法,但我稍后会解决这个问题
我还尝试遵循Matthias Shapiro()所描述的解决方案,但这导致代码崩溃
请给我指出正确的方向:)
Thnx Frank您所做的只是写入请求流。您缺少从响应读取的代码 返回请求xml的原因是您重置了请求流并从该确切流中读取 您的方法应如下所示:
private async Task DoCallWSAsync()
{
string url = "<my_url>";
// HTTP web request
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "text/xml";
httpWebRequest.Method = "POST";
// Write the request Asynchronously
using (var stream = await Task.Factory.FromAsync<Stream>(httpWebRequest.BeginGetRequestStream,
httpWebRequest.EndGetRequestStream, null))
{
string requestXml = "<my_request_xml>";
// convert request to byte array
byte[] requestAsBytes = Encoding.UTF8.GetBytes(requestXml);
// Write the bytes to the stream
await stream.WriteAsync(requestAsBytes , 0, requestAsBytes .Length);
}
using (WebResponse responseObject = await Task<WebResponse>.Factory.FromAsync(httpWebRequest.BeginGetResponse, httpWebRequest.EndGetResponse, httpWebRequest))
{
var responseStream = responseObject.GetResponseStream();
var sr = new StreamReader(responseStream);
string received = await sr.ReadToEndAsync();
return received;
}
}
专用异步任务DoCallWSAsync()
{
字符串url=“”;
//HTTP web请求
var httpWebRequest=(httpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType=“text/xml”;
httpWebRequest.Method=“POST”;
//异步写入请求
使用(var stream=await Task.Factory.fromsync(httpWebRequest.BeginGetRequestStream,
httpWebRequest.EndGetRequestStream,空)
{
字符串requestXml=“”;
//将请求转换为字节数组
byte[]requestAsBytes=Encoding.UTF8.GetBytes(requestXml);
//将字节写入流
wait stream.WriteAsync(requestAsBytes,0,requestAsBytes.Length);
}
使用(WebResponse responseObject=await Task.Factory.FromAsync(httpWebRequest.BeginGetResponse,httpWebRequest.EndGetResponse,httpWebRequest))
{
var responseStream=responseObject.GetResponseStream();
var sr=新的StreamReader(responseStream);
接收到字符串=等待sr.ReadToEndAsync();
收到的报税表;
}
}
您所做的只是写入请求流。您缺少从响应读取的代码
返回请求xml的原因是您重置了请求流并从该确切流中读取
您的方法应如下所示:
private async Task DoCallWSAsync()
{
string url = "<my_url>";
// HTTP web request
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "text/xml";
httpWebRequest.Method = "POST";
// Write the request Asynchronously
using (var stream = await Task.Factory.FromAsync<Stream>(httpWebRequest.BeginGetRequestStream,
httpWebRequest.EndGetRequestStream, null))
{
string requestXml = "<my_request_xml>";
// convert request to byte array
byte[] requestAsBytes = Encoding.UTF8.GetBytes(requestXml);
// Write the bytes to the stream
await stream.WriteAsync(requestAsBytes , 0, requestAsBytes .Length);
}
using (WebResponse responseObject = await Task<WebResponse>.Factory.FromAsync(httpWebRequest.BeginGetResponse, httpWebRequest.EndGetResponse, httpWebRequest))
{
var responseStream = responseObject.GetResponseStream();
var sr = new StreamReader(responseStream);
string received = await sr.ReadToEndAsync();
return received;
}
}
专用异步任务DoCallWSAsync()
{
字符串url=“”;
//HTTP web请求
var httpWebRequest=(httpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType=“text/xml”;
httpWebRequest.Method=“POST”;
//异步写入请求
使用(var stream=await Task.Factory.fromsync(httpWebRequest.BeginGetRequestStream,
httpWebRequest.EndGetRequestStream,空)
{
字符串requestXml=“”;
//将请求转换为字节数组
byte[]requestAsBytes=Encoding.UTF8.GetBytes(requestXml);
//将字节写入流
wait stream.WriteAsync(requestAsBytes,0,requestAsBytes.Length);
}
使用(WebResponse responseObject=await Task.Factory.FromAsync(httpWebRequest.BeginGetResponse,httpWebRequest.EndGetResponse,httpWebRequest))
{
var responseStream=responseObject.GetResponseStream();
var sr=新的StreamReader(responseStream);
接收到字符串=等待sr.ReadToEndAsync();
收到的报税表;
}
}
您所做的只是写入请求流。您缺少从响应读取的代码
返回请求xml的原因是您重置了请求流并从该确切流中读取
您的方法应如下所示:
private async Task DoCallWSAsync()
{
string url = "<my_url>";
// HTTP web request
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "text/xml";
httpWebRequest.Method = "POST";
// Write the request Asynchronously
using (var stream = await Task.Factory.FromAsync<Stream>(httpWebRequest.BeginGetRequestStream,
httpWebRequest.EndGetRequestStream, null))
{
string requestXml = "<my_request_xml>";
// convert request to byte array
byte[] requestAsBytes = Encoding.UTF8.GetBytes(requestXml);
// Write the bytes to the stream
await stream.WriteAsync(requestAsBytes , 0, requestAsBytes .Length);
}
using (WebResponse responseObject = await Task<WebResponse>.Factory.FromAsync(httpWebRequest.BeginGetResponse, httpWebRequest.EndGetResponse, httpWebRequest))
{
var responseStream = responseObject.GetResponseStream();
var sr = new StreamReader(responseStream);
string received = await sr.ReadToEndAsync();
return received;
}
}
专用异步任务DoCallWSAsync()
{
字符串url=“”;
//HTTP web请求
var httpWebRequest=(httpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType=“text/xml”;
httpWebRequest.Method=“POST”;
//异步写入请求
使用(var stream=await Task.Factory.fromsync(httpWebRequest.BeginGetRequestStream,
httpWebRequest.EndGetRequestStream,空)
{
字符串requestXml=“”;
//将请求转换为字节数组
byte[]requestAsBytes=Encoding.UTF8.GetBytes(requestXml);
//将字节写入流
wait stream.WriteAsync(requestAsBytes,0,requestAsBytes.Length);
}
使用(WebResponse responseObject=await Task.Factory.FromAsync(httpWebRequest.BeginGetResponse,httpWebRequest.EndGetResponse,httpWebRequest))
{
var responseStream=responseObject.GetResponseStream();
var sr=新的StreamReader(responseStream);
接收到字符串=等待sr.ReadToEndAsync();
收到的报税表;
}
}