您的位置:首页 > 理论基础 > 计算机网络

C# HttpWebRequest 异步请求

2016-10-28 14:21 316 查看
同事古X强帮忙实现的一个功能,记录下来,方便以后查阅

异步请求:

//定义委托
public delegate void Asyncdelegate(WebProxy objName);

//异步调用完成时,执行回调方法
private void CallbackMethod(IAsyncResult ar)
{
Asyncdelegate dlgt = (Asyncdelegate)ar.AsyncState;
dlgt.EndInvoke(ar);
}

//异步调用Commit方法
public virtual void Run()
{
Asyncdelegate isgt = new Asyncdelegate(Commit);
IAsyncResult ar = isgt.BeginInvoke(null,new AsyncCallback(CallbackMethod),isgt);
}


HttpWebRequest请求:

//向APM接口提交数据
//为什么要用WebProxy,因为.Net 4.0以下没有Host属性,无法设置标头来做DNS重连
public virtual void Commit(WebProxy objName = null)
{
string ret = string.Empty;
string ip = string.Empty;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.baidu.com");
request.Method = "POST";//
request.Timeout = 30000;
request.ContentType = "application/x-www-form-urlencoded";
request.ServicePoint.Expect100Continue = false;
if(objName != null)
{
request.Proxy = objName;
}
byte[] byteArray = Encoding.UTF8.GetBytes("&a=要发送的数据&b=要发送的数据");
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray,0,byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
dataStream = request.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
}
catch(WebException ex)
{
Debug.Error("提交Apm日志失败:"+ex.Status.ToString());
if(ex.Status.ToString().Equals("NameResolutionFailure"))//域名解释错误,重连一次,重新获取域名ip,用ip来拼接提交
{
ip = this.DnRetryGet("域名");
if(ip.Equals("0"))
{
return
}
WebProxy proxy = new WebProxy(ip,80);
this.Commit(proxy);
}
}

if(ret.Equals("1"))
{
Debug.Log("提交Apm日志成功");
}
else
{
Debug.Log("提交Apm日志失败:"+ret);
}

public virtual string DnsRetryGet(string doMain)
{

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  httpwebrequest 异步