【问题标题】:HttpListener exception in EndGetContext while closing listener关闭侦听器时 EndGetContext 中的 HttpListener 异常
【发布时间】:2015-12-23 09:08:06
【问题描述】:

我有以下简单的代码来处理我的应用程序中的一个 HTTP 请求。此代码有效,但是,每当我尝试结束应用程序并调用 close 函数时,我都会收到一个异常和堆栈跟踪,表明 EndGetContext 函数中正在发生这种情况。我怎样才能避免这种情况以及阻止这种情况的正确方法是什么?我当然可以在他的 waitforrequest 函数中捕获异常,然后将其推到地毯下,但是,恕我直言,这不是停止某些事情的好方法。由于 EndGetContext 函数中发生异常,之后我无法检查侦听器是否停止或设置信号...

internal void Run()
{
  m_HttpServer.Prefixes.Add(m_Config.PublicAccessSvcHttpPrefix); 
  m_HttpServer.Start();
  WaitForRequest();
}

private async void WaitForRequest()
{
  HttpListenerContext context = await m_HttpServer.GetContextAsync();
  HandleRequest(context);
  WaitForRequest();
}

internal void HandleRequest(...){...}

internal void Stop()
{
  m_HttpServer.Close();
}

//Handle request function will proccess the incoming request and do som things

【问题讨论】:

  • 所以你的问题不是如何处理异常,而是如何干净地关闭监听器?
  • 正确...恕我直言,如果我以“正常”方式停止某些事情,它不应该引发异常,因为停止和启动并不是真正的“异常”,它应该是正常和常见的功能。当然,异步仍然会返回,但是我应该能够检查返回的上下文以查看它是否有效,然后干净地退出。

标签: c# asynchronous httplistener


【解决方案1】:

我有同样的问题,我通过这个解决了:

m_HttpServer.Stop(); 
m_HttpServer.Close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 2013-01-04
    • 2011-11-30
    相关资源
    最近更新 更多