关于委托回调 实现异步http请求
比如 接口是public delegate void HttpCallback(object sender, object data);
Class HttpClientRequest
{
public static void RequestA(string id, object sender, HttpCallback callback) { }
public static void RequestB(string id, object sender, HttpCallback callback) { }
public static void RequestC(string id, object sender, HttpCallback callback) { }
}
Class HttpHelper
{
sendRequest()
}
我现在想要RequestA,RequestB,RequestC被统一调用,结果为data
请大神帮下忙 --------------------编程问答-------------------- 希望大家帮帮忙 挺急的,另外委托和消息机制我也学的不太懂 --------------------编程问答-------------------- http://topic.csdn.net/u/20120528/17/8fc50d63-d913-4187-9354-da7310ec8efa.html
回复下!!!!!!!!!! --------------------编程问答-------------------- 有没有伸出援手的啊 --------------------编程问答-------------------- 建立一个参数和返回类型与 HttpCallback 一致的方法,用来处理结果,参数 data 就是返回的结果,三个 Request 方法里得到返回的结果之后就调用
callback(sender, 返回的结果);
HttpCallback callback = 之前的方法;--------------------编程问答--------------------
RequestA(id, sender, callback);
RequestA(id, sender, callback);
RequestA(id, sender, callback);
大哥
能不能说的清楚点,不太明白 --------------------编程问答-------------------- 急啊 在线等. --------------------编程问答-------------------- 还是没人来帮啊 急啊 --------------------编程问答-------------------- 异步HTTP 请将请求继承与IHttpAsyncHandler接口 进行异步操作
--------------------编程问答--------------------
老大 能给出部分代码吗? --------------------编程问答--------------------
请问楼主的 所谓的请求HTTP 是web上的吧
我说的IHttpAsyncHandler 是一个异步请求 普通的aspx或者ashx是继承于IHttpHandler的
不知道楼主说的是哪一个 --------------------编程问答-------------------- 没人帮忙吗 我惨了 --------------------编程问答--------------------
是客户端 请求服务器,比如上传下载等请求操作 --------------------编程问答-------------------- 还有你上面说的 想要RequestA,RequestB,RequestC被统一调用 这个意思我不是很明白
是不是 你想把不同的请求都暂时放在一个比如请求数组里 但不返回 是吗?? 然后之后有个操作 将数组中的所有请求返回 达到推的效果?比方说comet思想??? --------------------编程问答-------------------- 我要做一个统一请求的入口 供别人调用进行 http请求操作 --------------------编程问答--------------------
那个统一调用就先放放吧,我是觉得A\B\C 返回和参数 都一样,开始的时候 我还想加个委托呢,到后来单个的我都想晕了,能否以其中一个请求操作帮我写出部分代码,我网上也找了好多例子 都看不太明白 --------------------编程问答-------------------- 额 客户端啊 我还以为是服务器端呢 那刚才我说的都是服务器端的异步请求 关系不大...
客户端的话我倒不是很熟悉 既然是客户端 楼主的统一调用的意思是不是多个不同请求 最后返回httpResponse处理都调用一个委托方法??? --------------------编程问答-------------------- 我把整体过程说下,我写了个http请求类,就是问题中HttpHelper,这个类能实现上传 下载功能(与服务器已连调成功)
客户端怕有堵塞 现在要求用异步请求 需要对HttpHelper进行2次封装,HttpClientRequest这个类就是需要封装异步请求操作的
但是委托回调我不会,不知该如何实现,接口部分是由别人提出的 --------------------编程问答--------------------
对,因为我看到请求的格式都一样的,关键里面那层回调返回的处理结果 我都不会如何做,统一调用我更想的晕了 --------------------编程问答--------------------
static void Main(string[] args)
{
//第一个请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.google.com.hk/");
MyResponse(() => { return request.GetResponse(); });
//第二个请求
request = (HttpWebRequest)WebRequest.Create("http://www.yahoo.com/");
MyResponse(() => { return request.GetResponse(); });
Console.ReadLine();
}
//你的共通方法
public static void MyResponse(Func<WebResponse> FunMethod)
{
WebResponse response = FunMethod();
Console.WriteLine(response.ResponseUri.AbsoluteUri);
}
你运行下看看 是不是你想要的结果
擦 难道我写复杂了? 呵呵 --------------------编程问答-------------------- 我明白你的意思了
public static void RequestA(string id, object sender, HttpCallback callback)
{
ThreadPool.QueueUserWorkItem(param =>
{
执行 sendRequest() 得到结果,假设为 data
callback(sender, data);
});
}
调用 RequestA 后方法立即返回不会阻塞,等到 sendRequest 执行完了后调用 HttpCallback 接口将执行结果传入。 --------------------编程问答-------------------- 擦 我写的不对 别参照我的 晕 --------------------编程问答--------------------
老大,关于请求部分是已经写好的,现在就是接口这部分 我不会用回调啊,而且必须要按照接口这种方式实现啊 --------------------编程问答-------------------- public delegate void HttpCallback(object sender, object data);
public static void RequestA(string id, object sender, HttpCallback callback) { }
方法httpRequest是请求方法
现在就是如何实现上面的回调 --------------------编程问答-------------------- 委托需要对应一个和它同参数列表和返回值的方法,RequestA 的参数 HttpCallback callback 就填一个与 HttpCallback 对应的方法名。 --------------------编程问答--------------------
看来你快理解我了,能否写出来代码呢 大哥,我是在有点晕了
public delegate void HttpCallback(object sender, object data);
public void dlgtCallback(object sender,object data)
{
}
public static void RequestA(string id, object sender, HttpCallback callback)
{
//sendRequest()比如所有的请求都用这个方法,是我封装好的
}
然后怎么串联起来实现回调啊,我晕倒了 --------------------编程问答-------------------- 还要实现异步请求操作 --------------------编程问答-------------------- 有没有人帮忙啊啊啊 --------------------编程问答--------------------
调用的时候:
HttpCallback callback = dlgtCallback;
RequestA(你的id, 你的sender, callback );
就这样。 --------------------编程问答-------------------- 完全异步就这样:
public delegate void HttpCallback(object sender, object data);
public void dlgtCallback(object sender,object data)
{
......
}
public static void RequestA(string id, object sender, HttpCallback callback)
{
ThreadPool.QueueUserWorkItem(param =>
{
执行 sendRequest() 得到结果,假设为 data
callback(sender, data);
});
}
调用:
HttpCallback callback = dlgtCallback;--------------------编程问答--------------------
RequestA(你的id, 你的sender, callback );
好像没回调啊,结果只是返回data给UI那边进行处理,我不懂 --------------------编程问答--------------------
谢谢你的热心,再求大神光临啊 --------------------编程问答--------------------
我觉得这些异步请求的操作应该都是封装好的,只给客户端一个传入url,或者id的一个方法 --------------------编程问答--------------------
回调的意思,RequestA 把该处理的处理完了后,调用 dlgtCallback 这个方法,按我上面所写,在 RequestA 方法内部,执行完了 sendRequest 方法后得到一个 data 结果,callback(sender, data) 把 data 传入,dlgtCallback 的参数 data 就是执行 sendRequest 的结果,余下的就在 dlgtCallback 方法内部处理了。
如果 RequestA 是下载文件,那调用 RequestA 后可以干别的事情,等到下载完了后,dlgtCallback 就被调用,参数 data 就是下载完之后的结果,dlgtCallback 内部就做下载完之后的事情。 --------------------编程问答--------------------
我把类文件发给你能帮我看看吗? --------------------编程问答--------------------
发吧
补充:.NET技术 , C#