silverlight HttpWebRequest post请求数据
2011-05-11 17:23
615 查看
public static List<RequestReturnValue> resultDataSet;
public MainPage()
{
InitializeComponent(); //设置当前界面线程
syncContext = SynchronizationContext.Current;
}
private SynchronizationContext syncContext;
private String postData = String.Empty;
private void PostData(object sender, RoutedEventArgs e)
{
//请注意:Silverlight 里的 HttpWebRequest, Encoding 类的属性和方法与常规的 .NET Framework 里面还是不同的。
result.Text = "开始提交数据……";
postData = "paramXml=" + data.Text; //要提交的内容
Uri url = new Uri("http://128.128.4.189:131/", UriKind.Absolute);
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create(url);
request.Method = "POST"; // Silverlight 只支持 GET 和 POST 方法
request.AllowReadStreamBuffering = true;
request.ContentType = "application/x-www-form-urlencoded";
request.BeginGetRequestStream(new AsyncCallback(RequestReady), request);
}
private void RequestReady(IAsyncResult asyncResult)
{
HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest;
StreamWriter postStream = new StreamWriter(request.EndGetRequestStream(asyncResult));
//byte[] byteArray = Encoding.UTF8.GetBytes(postData); //Encoding.GetEncoding()方法只支持四种编码。utf-8 , utf-16 , utf-16BE , utf-16LE
postStream.Write(postData); //处理中文的问题。不要使用 Stream 的 Write 方法。
postStream.Close();
postStream.Dispose();
request.BeginGetResponse(new AsyncCallback(ResponseReady), request);
}
void ResponseReady(IAsyncResult asyncResult)
{
HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest;
WebResponse response = request.EndGetResponse(asyncResult) as WebResponse; //同步线程上下文
if (syncContext == null) syncContext = new SynchronizationContext();
syncContext.Post(ExtractResponse, response);
}
private void ExtractResponse(object state)
{
WebResponse response = state as WebResponse;
Stream responseStream = response.GetResponseStream();
StreamReader streamRead = new StreamReader(responseStream); //显示返回的数据
result.Text = new StreamReader(responseStream).ReadToEnd();
response.Close();
responseStream.Close();
responseStream.Dispose();
streamRead.Close();
streamRead.Dispose();
}
private string getResult(string paramXml,int timeout)
{
string valuecode =System.Guid.NewGuid().ToString().Replace("-","");
string returnValue = "";
DateTime startDate=DateTime.Now;
bool flag = true;
while (flag)
{
// Demo(paramXml, valuecode);
TimeSpan ts = DateTime.Now - startDate;
if (ts.Seconds >= timeout)
{
flag = false;
}
for (int i = 0; i < resultDataSet.Count; i++)
{
if (resultDataSet[i].Key == valuecode)
{
flag = false;
returnValue = resultDataSet[i].Value;
lock (resultDataSet)
{
resultDataSet.RemoveAt(i);
}
break;
}
}
Thread.Sleep(100);
}
return returnValue;
}
public MainPage()
{
InitializeComponent(); //设置当前界面线程
syncContext = SynchronizationContext.Current;
}
private SynchronizationContext syncContext;
private String postData = String.Empty;
private void PostData(object sender, RoutedEventArgs e)
{
//请注意:Silverlight 里的 HttpWebRequest, Encoding 类的属性和方法与常规的 .NET Framework 里面还是不同的。
result.Text = "开始提交数据……";
postData = "paramXml=" + data.Text; //要提交的内容
Uri url = new Uri("http://128.128.4.189:131/", UriKind.Absolute);
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)WebRequest.Create(url);
request.Method = "POST"; // Silverlight 只支持 GET 和 POST 方法
request.AllowReadStreamBuffering = true;
request.ContentType = "application/x-www-form-urlencoded";
request.BeginGetRequestStream(new AsyncCallback(RequestReady), request);
}
private void RequestReady(IAsyncResult asyncResult)
{
HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest;
StreamWriter postStream = new StreamWriter(request.EndGetRequestStream(asyncResult));
//byte[] byteArray = Encoding.UTF8.GetBytes(postData); //Encoding.GetEncoding()方法只支持四种编码。utf-8 , utf-16 , utf-16BE , utf-16LE
postStream.Write(postData); //处理中文的问题。不要使用 Stream 的 Write 方法。
postStream.Close();
postStream.Dispose();
request.BeginGetResponse(new AsyncCallback(ResponseReady), request);
}
void ResponseReady(IAsyncResult asyncResult)
{
HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest;
WebResponse response = request.EndGetResponse(asyncResult) as WebResponse; //同步线程上下文
if (syncContext == null) syncContext = new SynchronizationContext();
syncContext.Post(ExtractResponse, response);
}
private void ExtractResponse(object state)
{
WebResponse response = state as WebResponse;
Stream responseStream = response.GetResponseStream();
StreamReader streamRead = new StreamReader(responseStream); //显示返回的数据
result.Text = new StreamReader(responseStream).ReadToEnd();
response.Close();
responseStream.Close();
responseStream.Dispose();
streamRead.Close();
streamRead.Dispose();
}
private string getResult(string paramXml,int timeout)
{
string valuecode =System.Guid.NewGuid().ToString().Replace("-","");
string returnValue = "";
DateTime startDate=DateTime.Now;
bool flag = true;
while (flag)
{
// Demo(paramXml, valuecode);
TimeSpan ts = DateTime.Now - startDate;
if (ts.Seconds >= timeout)
{
flag = false;
}
for (int i = 0; i < resultDataSet.Count; i++)
{
if (resultDataSet[i].Key == valuecode)
{
flag = false;
returnValue = resultDataSet[i].Value;
lock (resultDataSet)
{
resultDataSet.RemoveAt(i);
}
break;
}
}
Thread.Sleep(100);
}
return returnValue;
}
相关文章推荐
- HttpWebRequest POST 数据时请求头多了一行Expect: 100-continue,少了数据行
- C# HttpWebRequest Post Get 请求数据
- HttpWebRequest post请求获取webservice void数据信息
- HttpWebRequest POST 数据时请求头多了一行Expect: 100-continue,少了数据行
- HttpWebRequest POST 数据时请求头多了一行Expect: 100-continue,少了数据行
- 向post请求中写入数据,最终保存在了HttpWebRequest.Params中
- C#POST数据,HttpWebRequest请求页面,HttpWebResponse返回数据
- C# winform端 通过HttpWebRequest进行post和get请求,数据格式为json,后台java端接收,其中有关传输特殊字符(\t,\r,',\n,n)等处理
- 通过HttpWebRequest 发送 POST 请求实现自动登陆
- HttpWebRequest 请求数据
- HttpWebRequest post数据[xgluxv]
- WebClient HttpWebRequest从网页中获取请求数据
- (HttpWebRequest )服务器上传请求Post方式
- 如何使用HttpWebRequest POST数据时设置Connection="Keep-Alive"
- C#中使用HttpWebRequest用Post提交MultiPart数据
- 使用HttpWebRequest发送自定义POST请求(以http方式推送消息)
- 使用HttpWebRequest发送自定义POST请求(转帖)
- HttpWebRequest 向网站提交数据 (post与get方式)
- 通过HttpWebRequest 发送 POST 请求实现自动登陆
- 使用HttpWebRequest post数据时要注意UrlEncode