httplistener异步的一个小问题

jimever 2013-07-15 12:12:30
网络上找了个httplistener异步的例子
http://blogread.cn/it/article.php?id=291

可以运行,但有个小问题,就是每次访问时,接收程序会运行2次,这个很奇怪
就是后面代码中HandleRequest方法里的Console.WriteLine("good");会输出2次,这个有办法解决吗

付代码:
static void EndGetRequest(IAsyncResult result)
{
HttpListenerContext context = null;
System.Net.HttpListener listener = (System.Net.HttpListener)result.AsyncState;

try
{
context = listener.EndGetContext(result);
HandleRequest(context);
}
catch (Exception ex)
{
Console.Write("Exception in listener: {0}{1}", Environment.NewLine, ex);
}
finally
{
if (context != null)
context.Response.Close();

if (listener.IsListening)
listener.BeginGetContext(EndGetRequest, listener);
}
}

static void HandleRequest(HttpListenerContext context)
{
bool isScrape = context.Request.RawUrl.StartsWith("/scrape", StringComparison.OrdinalIgnoreCase);

string responseStr = "very nice! haha"n来个中文你支持吗?"n";
for (int i = 0; i < context.Request.QueryString.Count; i++)
{

responseStr = responseStr + "query:" + context.Request.QueryString.Keys[i] + "=" + context.Request.QueryString[i] + ""n";
}
Console.WriteLine("good");

byte[] response = System.Text.Encoding.Default.GetBytes(responseStr);
context.Response.ContentType = "text/plain"; //这里的类型随便你写.如果想返回HTML格式使用text/html
context.Response.StatusCode = 200;
context.Response.ContentLength64 = response.LongLength;
context.Response.OutputStream.Write(response, 0, response.Length);
}
...全文
120 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
人生导师 2013-09-06
  • 打赏
  • 举报
回复
你在finally也调用了EndGetRequest方法的,这样就会导致HandleRequest方法调用两次的
jiaoshiyao 2013-09-05
  • 打赏
  • 举报
回复
代码太多了。。问下核心的东西

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧