当前位置:编程学习 > C#/ASP.NET >>

关于委托回调 实现异步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);
--------------------编程问答--------------------
引用 4 楼  的回复:
建立一个参数和返回类型与 HttpCallback 一致的方法,用来处理结果,参数 data 就是返回的结果,三个 Request 方法里得到返回的结果之后就调用
C# code
callback(sender, 返回的结果);

C# code
HttpCallback callback = 之前的方法;
RequestA(id, sender, callback);
RequestA……

大哥
能不能说的清楚点,不太明白 --------------------编程问答-------------------- 急啊 在线等. --------------------编程问答-------------------- 还是没人来帮啊 急啊 --------------------编程问答-------------------- 异步HTTP 请将请求继承与IHttpAsyncHandler接口 进行异步操作
--------------------编程问答--------------------
引用 8 楼  的回复:
异步HTTP 请将请求继承与IHttpAsyncHandler接口 进行异步操作

老大 能给出部分代码吗? --------------------编程问答--------------------
引用 9 楼  的回复:
引用 8 楼  的回复:

异步HTTP 请将请求继承与IHttpAsyncHandler接口 进行异步操作

老大 能给出部分代码吗?

请问楼主的 所谓的请求HTTP 是web上的吧 
我说的IHttpAsyncHandler  是一个异步请求    普通的aspx或者ashx是继承于IHttpHandler的
不知道楼主说的是哪一个 --------------------编程问答-------------------- 没人帮忙吗 我惨了 --------------------编程问答--------------------
引用 10 楼  的回复:
引用 9 楼  的回复:

引用 8 楼  的回复:

异步HTTP 请将请求继承与IHttpAsyncHandler接口 进行异步操作

老大 能给出部分代码吗?

请问楼主的 所谓的请求HTTP 是web上的吧 
我说的IHttpAsyncHandler  是一个异步请求    普通的aspx或者ashx是继承于IHttpHandler的
不知道楼主说的是哪一个

是客户端 请求服务器,比如上传下载等请求操作 --------------------编程问答-------------------- 还有你上面说的 想要RequestA,RequestB,RequestC被统一调用  这个意思我不是很明白
是不是  你想把不同的请求都暂时放在一个比如请求数组里  但不返回 是吗??  然后之后有个操作 将数组中的所有请求返回 达到推的效果?比方说comet思想??? --------------------编程问答-------------------- 我要做一个统一请求的入口 供别人调用进行 http请求操作 --------------------编程问答--------------------
引用 13 楼  的回复:
还有你上面说的 想要RequestA,RequestB,RequestC被统一调用  这个意思我不是很明白
是不是  你想把不同的请求都暂时放在一个比如请求数组里  但不返回 是吗??  然后之后有个操作 将数组中的所有请求返回 达到推的效果?比方说comet思想???

那个统一调用就先放放吧,我是觉得A\B\C 返回和参数 都一样,开始的时候 我还想加个委托呢,到后来单个的我都想晕了,能否以其中一个请求操作帮我写出部分代码,我网上也找了好多例子 都看不太明白 --------------------编程问答-------------------- 额 客户端啊  我还以为是服务器端呢   那刚才我说的都是服务器端的异步请求  关系不大... 
客户端的话我倒不是很熟悉   既然是客户端  楼主的统一调用的意思是不是多个不同请求  最后返回httpResponse处理都调用一个委托方法??? --------------------编程问答-------------------- 我把整体过程说下,我写了个http请求类,就是问题中HttpHelper,这个类能实现上传 下载功能(与服务器已连调成功)

客户端怕有堵塞 现在要求用异步请求 需要对HttpHelper进行2次封装,HttpClientRequest这个类就是需要封装异步请求操作的

但是委托回调我不会,不知该如何实现,接口部分是由别人提出的 --------------------编程问答--------------------
引用 16 楼  的回复:
额 客户端啊  我还以为是服务器端呢   那刚才我说的都是服务器端的异步请求  关系不大... 
客户端的话我倒不是很熟悉   既然是客户端  楼主的统一调用的意思是不是多个不同请求  最后返回httpResponse处理都调用一个委托方法???

对,因为我看到请求的格式都一样的,关键里面那层回调返回的处理结果 我都不会如何做,统一调用我更想的晕了 --------------------编程问答--------------------
        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 接口将执行结果传入。 --------------------编程问答-------------------- 擦  我写的不对  别参照我的  晕 --------------------编程问答--------------------
引用 19 楼  的回复:
C# code
        static void Main(string[] args)
        {
            //第一个请求
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.google.com.hk/");

            MyResp……

老大,关于请求部分是已经写好的,现在就是接口这部分 我不会用回调啊,而且必须要按照接口这种方式实现啊 --------------------编程问答-------------------- public delegate void HttpCallback(object sender, object data);
public static void RequestA(string id, object sender, HttpCallback callback) { }

方法httpRequest是请求方法

现在就是如何实现上面的回调 --------------------编程问答-------------------- 委托需要对应一个和它同参数列表和返回值的方法,RequestA 的参数 HttpCallback callback 就填一个与 HttpCallback 对应的方法名。 --------------------编程问答--------------------
引用 24 楼  的回复:
委托需要对应一个和它同参数列表和返回值的方法,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()比如所有的请求都用这个方法,是我封装好的
}
然后怎么串联起来实现回调啊,我晕倒了 --------------------编程问答-------------------- 还要实现异步请求操作 --------------------编程问答-------------------- 有没有人帮忙啊啊啊 --------------------编程问答--------------------
引用 25 楼  的回复:
引用 24 楼 的回复:

委托需要对应一个和它同参数列表和返回值的方法,RequestA 的参数 HttpCallback callback 就填一个与 HttpCallback 对应的方法名。

看来你快理解我了,能否写出来代码呢 大哥,我是在有点晕了
public delegate void HttpCallback(object sender, object data);

……

调用的时候:
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 );
--------------------编程问答--------------------
引用 29 楼  的回复:
完全异步就这样:
C# code
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{
    ......
}

public static void RequestA(string id, object se……

好像没回调啊,结果只是返回data给UI那边进行处理,我不懂 --------------------编程问答--------------------
引用 29 楼  的回复:
完全异步就这样:
C# code
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{
    ......
}

public static void RequestA(string id, object se……

谢谢你的热心,再求大神光临啊 --------------------编程问答--------------------
引用 29 楼  的回复:
完全异步就这样:
C# code
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{
    ......
}

public static void RequestA(string id, object se……


我觉得这些异步请求的操作应该都是封装好的,只给客户端一个传入url,或者id的一个方法 --------------------编程问答--------------------
引用 30 楼  的回复:
引用 29 楼 的回复:

完全异步就这样:
C# code
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{
......
}

public static void RequestA(st……

回调的意思,RequestA 把该处理的处理完了后,调用 dlgtCallback 这个方法,按我上面所写,在 RequestA 方法内部,执行完了 sendRequest 方法后得到一个 data 结果,callback(sender, data) 把 data 传入,dlgtCallback 的参数 data 就是执行 sendRequest 的结果,余下的就在 dlgtCallback 方法内部处理了。
如果 RequestA 是下载文件,那调用 RequestA 后可以干别的事情,等到下载完了后,dlgtCallback 就被调用,参数 data 就是下载完之后的结果,dlgtCallback 内部就做下载完之后的事情。 --------------------编程问答--------------------
引用 33 楼  的回复:
引用 30 楼  的回复:
引用 29 楼 的回复:

完全异步就这样:
C# code
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{
......
}

public static ……


我把类文件发给你能帮我看看吗? --------------------编程问答--------------------
引用 34 楼  的回复:
引用 33 楼  的回复:

引用 30 楼  的回复:
引用 29 楼 的回复:

完全异步就这样:
C# code
public delegate void HttpCallback(object sender, object data);

public void dlgtCallback(object sender,object data)
{
......
}
……

发吧
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,