Silverlight HttpUtil 封装Post调用
来源:互联网 发布:国网网络大学网址 编辑:程序博客网 时间:2024/06/01 09:56
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;
using System.Threading;
using System.Text;
namespace Navi
{
/*
* 钟磊 20111127
*
* 封装silverlight 中的Http Post调用
*
* 使用时需要在应用的第一个构造函数中添加语句,否则无法取到Http响应头
*
* bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
*
* 形如:
*
* public MainPage()
{
//For Get Http Header
bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
InitializeComponent();
* }
*/
public class HttpUtil
{
/*
* *
* HTTP_CALLBACK 用户调用传入的回调函数
* success 调用是否成功
* compress 返回的stream是否是zip过的
* flag 调用时传入的标记,用以在调用端区分是哪一个的回调
* responseStream,Http响应传回的流
*/
public delegate void HTTP_CALLBACK(bool success, bool compress, string flag, Stream responseStream);
private byte[] _postData = null;
private SynchronizationContext _syncContext = null;
private HTTP_CALLBACK _cb = null;
private string _flag;//当前调用的动作
public HttpUtil(){}
public void Post(string strPara, string strUrl, string strFlag, HTTP_CALLBACK cb)
{
//保存当前调用线程上下文(用户线程)
_syncContext = SynchronizationContext.Current;
_cb = cb;
_postData = Encoding.UTF8.GetBytes(strPara);
_flag = strFlag;
Uri endpoint = new Uri(strUrl, UriKind.Absolute);
HttpWebRequest request = WebRequest.Create(endpoint) as HttpWebRequest;
request.Method = "POST";
IAsyncResult asyncResult = request.BeginGetRequestStream(
new AsyncCallback(callback_resuest), request);
}
private void callback_resuest(IAsyncResult result)
{
HttpWebRequest request = result.AsyncState as HttpWebRequest;
request.ContentType = "application/x-www-form-urlencoded";
Stream requestStream = request.EndGetRequestStream(result);
requestStream.Write(_postData, 0, _postData.Length);
requestStream.Close();
request.BeginGetResponse(new AsyncCallback(callback_response), request);
}
private void callback_response(IAsyncResult asyncResult)
{
HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest;
WebResponse response = request.EndGetResponse(asyncResult);
//回调界面,返回用户线程
_syncContext.Post(callback_ui, response);
}
private void callback_ui(object state)
{
HttpWebResponse response = state as HttpWebResponse;
//与服务端约定返回数据是否压缩(ZIP)标志
bool compress = (response.Headers["COMPRESS"].ToUpper() == "TRUE");
//与服务端约定的成功标志
bool success = (response.Headers["RESULT_CODE"].ToUpper() == "OK");
//回调
_cb(success,compress,_flag,response.GetResponseStream());
response.GetResponseStream().Close();
response.Close();
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//这样调用
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Text;
using System.Threading;
using System.IO;
using Navi;
using System.Net.Browser;
namespace Silverlight_HttpDemo
{
public partial class MainPage : UserControl
{
private string para = @"
SQL=select * from sys_czyb where rownum < 3
&USER=app_user
&CHARSET=UTF-8
&FUN=select
&COMPRESS=true
&SPLITE_ROW=|
&SPLITE_COL=^
";
private string url = "http://10.111.43.18:8099/pmias/servlet/db_proc_common";
public MainPage()
{
//For Get Http Header
bool registerResult = WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);
InitializeComponent();
para = para.Replace("\r\n", "");
}
//请求获取文本
private void button1_Click(object sender, RoutedEventArgs e)
{
new HttpUtil().Post(para, url, "GET_TXT", this.http_cb);
}
//请求获取数据后保存
Stream savefile;
private void button2_Click(object sender, RoutedEventArgs e)
{
SaveFileDialog sf = new SaveFileDialog();
if (sf.ShowDialog() == true)
{
savefile = sf.OpenFile();
new HttpUtil().Post(para,url,"SAVE_FILE",this.http_cb);
}
}
//回调函数
private void http_cb(Boolean success,bool compress,string flag,Stream responseStream)
{
String fmt = @"成功:{0}
压缩:{1}
内容:{2}";
string content = "未定义";
switch (flag)
{
case "SAVE_FILE":
{
if (success == false)
{
//失败,不写入文件,取出错误信息
if (compress)
content = ZipUtil.ZipStream2String(responseStream);
else
content = ZipUtil.Stream2String(responseStream);
savefile.Close();
}
else
{
//成功,将返回的流写入文件
if (compress)
ZipUtil.ZipStream2File(savefile, responseStream);
else
ZipUtil.Stream2File(savefile, responseStream);
savefile.Close();
content = "成功";
}
content = String.Format(fmt, success, compress, content);
}
break;
case "GET_TXT":
{
if (compress)
content = ZipUtil.ZipStream2String(responseStream);
else
content = ZipUtil.Stream2String(responseStream);
content = String.Format(fmt, success, compress, content);
}
break;
default:
MessageBox.Show("错误的flag:"+flag);
break;
}
MessageBox.Show(content, "提示", MessageBoxButton.OK);
}
}
}
- Silverlight HttpUtil 封装Post调用
- 解析HttpUtil--post方法
- 使用 HttpUtil 调用 接口
- HttpUtil-get请求-post请求
- HttpUtil工具类发送post请求
- HttpUtil
- HttpUtil
- httputil
- HttpUtil
- HttpUtil
- HttpUtil
- HttpUtil
- HttpUtil
- HttpUtil
- HttpUtil
- HttpUtil
- httpUtil
- HttpUtil
- 使用Flash, HTML5, Unity进行web游戏开发的现状对比
- servlet forward action问题以及struts2拦截servlet问题
- web开发中的缓存问题的研究(一)
- 好玩的黑客游戏(过把黑客的瘾)
- erlang socket
- Silverlight HttpUtil 封装Post调用
- web开发中的缓存问题的研究(二)
- 资治通鉴,卷九十七,高诩又谈管理
- 黑马程序员—学习笔记C#之socket
- 内存分配方式
- web开发中的缓存问题的研究(三)
- ios UIImagePickerController 添加一个自定义的view。
- js刷新页面 方法大全
- 【漫谈】计算机专业找工作的一点感想