账号,密码作为postdata附加到http请求中,异步回调函数就一个,如何确定请求返回结果是哪一个请求(哪一组账号,密码)所产生的?怎么判断呢。。。。。
15 个解决方案
#1
根据账号匹配账号下的密码。
#2
怎么判断返回结果是哪一个账号所产生?
#3
你要异步操作的话,必须等待得到回复再进行验证,你用委托方式来实现回调的法你无法控制回调方法的进度的,你最好使用async和await关键字来实现异步,不要用委托的方式来实现异步的,你可以参考这个文章来实现下:
http://www.cnblogs.com/zhili/archive/2013/05/15/Csharp5asyncandawait.html
http://www.cnblogs.com/zhili/archive/2013/05/15/Csharp5asyncandawait.html
#4
我从网上找了一段代码:
static void Main(string[] args)
{
for (int i = 1; i < 10; i++)
{
HttpWebRequest request = WebRequest.Create("http://www.baidu.com") as HttpWebRequest;
Console.WriteLine("Begin " + DateTime.Now.ToString());
request.BeginGetResponse(new AsyncCallback(Compleate), request);
Console.WriteLine("请求" + i + "完成");
}
Console.Read();
}
static void Compleate(IAsyncResult asyncResult)
{
Console.WriteLine("End " + DateTime.Now.ToString());
Console.WriteLine("异步完成");
if (asyncResult == null)
{
return;
}
HttpWebRequest req = (asyncResult.AsyncState as HttpWebRequest);
HttpWebResponse res = req.EndGetResponse(asyncResult) as HttpWebResponse;
StreamReader reader = new StreamReader(res.GetResponseStream());
Console.WriteLine(reader.ReadToEnd());
}
我应该把账号、密码,我应该在 BeginGetResponse之前设置好账号、密码,还是在回调函数中设置,不太明白 异步http请求原理。。
#5
同步方式多线程不行吗?
#6
我现在就想异步方式处理。。给解决下
#7
代码方面不知道咋解决,异步不知道怎么传个自定义的参数。但具体网站可以具体分析,比如有的网站登录后返回的Cookie中会有登录账号,还有的是先链接网站可以获取SessionID,然后账号密码登录后SessionID是不变的,这样也行,就是麻烦点。或者网站登录后获取用户名来比对下也行。
#8
你能明白我的意思,不错了。。
#9
返回时可以把账号也放进去。这样的话,账号和验证结果就对应了。
#10
你能明白我的意思,不错了。。
如果是自己研究的话就慢慢百度找资料吧。或者从回调函数的中的req中解析账号对比。如果是任务的话,同步多线程,几千个用不了几分钟
#11
返回时可以把账号也放进去。这样的话,账号和验证结果就对应了。
你是说把账号放到 回调函数参数里?回调函数类型是固定的。
麻烦亲,说清楚点,我愚。。。。
#12
加到Response响应流中
把需要传回去的数据通过Response.Write()方法写入
你再通过res.GetResponseStream()就能取到了
把需要传回去的数据通过Response.Write()方法写入
你再通过res.GetResponseStream()就能取到了
#13
比如说,你可以将参数组合在一起,例如
然后在你的 request.BeginGetResponse(new AsyncCallback(Compleate), request); 这里第二个参数传送 MyRequestSession 类型的参数,而不是 request。
也可以完全不用参数,而将委托封装起来。例如
而调用委托时则是
这两种方式都可以。
public class MyRequestSession
{
public string 账号;
pulbic HttpWebReeust request;
}
然后在你的 request.BeginGetResponse(new AsyncCallback(Compleate), request); 这里第二个参数传送 MyRequestSession 类型的参数,而不是 request。
也可以完全不用参数,而将委托封装起来。例如
public class MyRequestSession
{
public string 账号;
pubic HttpWebReeust request;
public void Compleate(IAsyncResult asyncResult)
{
............... //这里可以直接从 this.账号 这样的语法取得参数
}
}
而调用委托时则是
var session = new MyRequestSession{ 账号=...,
request= request};
request.BeginGetResponse(session.Compleate, null);
这两种方式都可以。
#14
设计上第二种方式,基本上就是匿名委托的概念。在使用了lamda表达式之后,匿名委托变成了优雅和精炼的形式:
request.BeginGetResponse(h=>
{
//这里写 Compleate 方法内的实现代码,而且可以直接访问 账号、request 等参数,不需要考虑如何传递的问题
}, null);
#15
其实,请求的时候生成一个ID,传过去,回调时也把ID传回来就是了,就可以一一对应了
#1
根据账号匹配账号下的密码。
#2
根据账号匹配账号下的密码。
怎么判断返回结果是哪一个账号所产生?
#3
你要异步操作的话,必须等待得到回复再进行验证,你用委托方式来实现回调的法你无法控制回调方法的进度的,你最好使用async和await关键字来实现异步,不要用委托的方式来实现异步的,你可以参考这个文章来实现下:
http://www.cnblogs.com/zhili/archive/2013/05/15/Csharp5asyncandawait.html
http://www.cnblogs.com/zhili/archive/2013/05/15/Csharp5asyncandawait.html
#4
你要异步操作的话,必须等待得到回复再进行验证,你用委托方式来实现回调的法你无法控制回调方法的进度的,你最好使用async和await关键字来实现异步,不要用委托的方式来实现异步的,你可以参考这个文章来实现下:
http://www.cnblogs.com/zhili/archive/2013/05/15/Csharp5asyncandawait.html
我从网上找了一段代码:
static void Main(string[] args)
{
for (int i = 1; i < 10; i++)
{
HttpWebRequest request = WebRequest.Create("http://www.baidu.com") as HttpWebRequest;
Console.WriteLine("Begin " + DateTime.Now.ToString());
request.BeginGetResponse(new AsyncCallback(Compleate), request);
Console.WriteLine("请求" + i + "完成");
}
Console.Read();
}
static void Compleate(IAsyncResult asyncResult)
{
Console.WriteLine("End " + DateTime.Now.ToString());
Console.WriteLine("异步完成");
if (asyncResult == null)
{
return;
}
HttpWebRequest req = (asyncResult.AsyncState as HttpWebRequest);
HttpWebResponse res = req.EndGetResponse(asyncResult) as HttpWebResponse;
StreamReader reader = new StreamReader(res.GetResponseStream());
Console.WriteLine(reader.ReadToEnd());
}
我应该把账号、密码,我应该在 BeginGetResponse之前设置好账号、密码,还是在回调函数中设置,不太明白 异步http请求原理。。
#5
同步方式多线程不行吗?
#6
同步方式多线程不行吗?
我现在就想异步方式处理。。给解决下
#7
我现在就想异步方式处理。。给解决下
代码方面不知道咋解决,异步不知道怎么传个自定义的参数。但具体网站可以具体分析,比如有的网站登录后返回的Cookie中会有登录账号,还有的是先链接网站可以获取SessionID,然后账号密码登录后SessionID是不变的,这样也行,就是麻烦点。或者网站登录后获取用户名来比对下也行。
#8
我现在就想异步方式处理。。给解决下
代码方面不知道咋解决,异步不知道怎么传个自定义的参数。但具体网站可以具体分析,比如有的网站登录后返回的Cookie中会有登录账号,还有的是先链接网站可以获取SessionID,然后账号密码登录后SessionID是不变的,这样也行,就是麻烦点。或者网站登录后获取用户名来比对下也行。
你能明白我的意思,不错了。。
#9
返回时可以把账号也放进去。这样的话,账号和验证结果就对应了。
#10
你能明白我的意思,不错了。。
如果是自己研究的话就慢慢百度找资料吧。或者从回调函数的中的req中解析账号对比。如果是任务的话,同步多线程,几千个用不了几分钟
#11
返回时可以把账号也放进去。这样的话,账号和验证结果就对应了。
你是说把账号放到 回调函数参数里?回调函数类型是固定的。
麻烦亲,说清楚点,我愚。。。。
#12
加到Response响应流中
把需要传回去的数据通过Response.Write()方法写入
你再通过res.GetResponseStream()就能取到了
把需要传回去的数据通过Response.Write()方法写入
你再通过res.GetResponseStream()就能取到了
#13
比如说,你可以将参数组合在一起,例如
然后在你的 request.BeginGetResponse(new AsyncCallback(Compleate), request); 这里第二个参数传送 MyRequestSession 类型的参数,而不是 request。
也可以完全不用参数,而将委托封装起来。例如
而调用委托时则是
这两种方式都可以。
public class MyRequestSession
{
public string 账号;
pulbic HttpWebReeust request;
}
然后在你的 request.BeginGetResponse(new AsyncCallback(Compleate), request); 这里第二个参数传送 MyRequestSession 类型的参数,而不是 request。
也可以完全不用参数,而将委托封装起来。例如
public class MyRequestSession
{
public string 账号;
pubic HttpWebReeust request;
public void Compleate(IAsyncResult asyncResult)
{
............... //这里可以直接从 this.账号 这样的语法取得参数
}
}
而调用委托时则是
var session = new MyRequestSession{ 账号=...,
request= request};
request.BeginGetResponse(session.Compleate, null);
这两种方式都可以。
#14
设计上第二种方式,基本上就是匿名委托的概念。在使用了lamda表达式之后,匿名委托变成了优雅和精炼的形式:
request.BeginGetResponse(h=>
{
//这里写 Compleate 方法内的实现代码,而且可以直接访问 账号、request 等参数,不需要考虑如何传递的问题
}, null);
#15
其实,请求的时候生成一个ID,传过去,回调时也把ID传回来就是了,就可以一一对应了