我在 Windows 服务中使用 HttpListener 实现了一个非常简单的 C# Http Server,它等待请求并在收到请求时将它们发送到 ZMQ。它与这里的 HTTP 服务器非常相似 -生产就绪、多线程 c# http 服务器,只是它异步执行 RunServer 委托,然后一旦服务启动,就会处于 HttpListener 正在侦听的连续循环中。我想我有一些大部分工作的东西,但是当我停止服务器时,如果请求未完成,那么它会引发错误
由于线程退出或应用程序请求,I/O 操作已中止
在处理方法中。我担心我也忽略了生产环境所需的其他东西。
public XsmHttpServer(string httpAddressEndpoint)
{
_listener = new HttpListener();
_listenerAddr = httpAddressEndpoint;
}
public void Start()
{
_listener.Start();
Action action = RunServer;
action.BeginInvoke(RunServerCallback, action);
}
private void RunServer()
{
while (_listener.IsListening)
{
IAsyncResult result = _listener.BeginGetContext(Handle, _listener);
result.AsyncWaitHandle.WaitOne();
}
}
private void Handle(IAsyncResult result)
{
HttpListener listener = (HttpListener)result.AsyncState;
HttpListenerContext context = listener.EndGetContext(result);
//Do work, send to ZMQ & write response back
_handler.Handle(context);
}
private void RunServerCallback(IAsyncResult ar)
{
try
{
Action target = (Action)ar.AsyncState;
target.EndInvoke(ar);
}
catch (Exception ex)
{
if (_log.IsDebugEnabled) _log.Debug("Failed to initialize Server", ex);
}
}
public void Stop()
{
_listener.Close();
}