私は、Windowsサービス内でHttpListenerを使用して本当にシンプルなC#Httpサーバーを実装しました。要求を待ってZMQに送信します。これはHTTPサーバーと非常によく似ています - Production ready, multi-threaded c# http server RunServerデリゲートを非同期的に実行し、サービスが開始されるとHttpListenerがリスニングしている連続ループに座っています。私は、しかし、私は、サーバーを停止すると要求が傑出しているならば、それは単純なHttpサーバーの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();
}
ありがとうございます - これをコードに追加します – Nicki