複数の Windows サービスをデプロイするサービス アプリケーションがあります
static void Main()
{
DebugManager manager = new DebugManager();
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1(),
new Service2(),
new Service3(),
};
ServiceBase.Run(ServicesToRun);
}
ここにデバッグマネージャーがあります
public class DebugManager : BaseDebug
{
private AsyncServer s;
public DebugManager()
{
s = new AsyncServer(10000);
s.Start();
}
public override void SendMessage(string message)
{
ts.SendMessage(message);
}
}
そしてソケットサーバー自体
class AsyncServer
{
private Socket _serverSocket;
private List<Socket> _clients;
private int _port;
byte[] buffer = new byte[255];
public AsyncServer(int port) { _port = port; }
public void Start()
{
try
{
_clients = new List<Socket>();
SetupServerSocket();
_serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), _serverSocket);
}
catch(Exception ex)
{
EventLogManager.LogInformation(ex.ToString());
}
}
private void SetupServerSocket()
{
try
{
IPHostEntry localMachineInfo = Dns.GetHostEntry(Dns.GetHostName());
IPEndPoint myEndpoint = new IPEndPoint(localMachineInfo.AddressList[1], _port);
_serverSocket = new Socket(myEndpoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
_serverSocket.Bind(myEndpoint);
_serverSocket.Listen((int)SocketOptionName.MaxConnections);
}
catch (Exception ex)
{
EventLogManager.LogInformation(ex.ToString());
}
}
private void AcceptCallback(IAsyncResult result)
{
try
{
Socket s = (Socket)result.AsyncState;
Socket socket = s.EndAccept(result);
_clients.Add(socket);
_serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), result.AsyncState);
}
catch (SocketException ex)
{
EventLogManager.LogInformation(ex.ToString());
}
catch (Exception ex)
{
EventLogManager.LogInformation(ex.ToString());
}
}
public void SendMessage(string message)
{
try
{
byte[] bits = Encoding.UTF8.GetBytes(message);
SocketAsyncEventArgs args = new SocketAsyncEventArgs();
args.SetBuffer(bits, 0, bits.Length);
foreach (var client in _clients)
{
if (!client.Connected)
{
_clients.Remove(client);
continue;
}
try
{
client.SendAsync(args);
}
catch (Exception ex)
{
EventLogManager.LogInformation(ex.ToString());
}
}
}
catch (Exception ex)
{
EventLogManager.LogInformation(ex.ToString());
}
}
}
サービスをデプロイすると、ソケット サーバーが起動していないか、起動してすぐに閉じたように見えます。私のデザインに何か問題がありますか、それとも im コードでしょうか?