Рабочая роль Azure TCPListener, получающая неизвестные соединения
Я написал рабочую роль Azure, которая настраивает TCPListener и получает сообщения. Эти сообщения затем направляются в разные очереди служебной шины в зависимости от их содержимого. Код рабочей роли ниже:
private async Task RunAsync(CancellationToken cancellationToken)
{
TcpListener listener;
IPEndPoint ipEndPoint;
ipEndPoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["MainEndpoint"].IPEndpoint;
listener = new TcpListener(ipEndPoint) { ExclusiveAddressUse = false };
listener.Start();
_log.Info($"Created and started listener on {ipEndPoint.Address}:{ipEndPoint.Port}");
while (!cancellationToken.IsCancellationRequested)
{
listener.BeginAcceptTcpClient(AsyncMessageHandler, listener);
_connectionWaitHandle.WaitOne();
}
}
private void AsyncMessageHandler(IAsyncResult result)
{
byte[] bytes = new byte[0];
try
{
_log.Debug("Session initiated");
var listener = (TcpListener)result.AsyncState;
var client = listener.EndAcceptTcpClient(result);
_connectionWaitHandle.Set();
var netStream = client.GetStream();
bytes = new byte[short.MaxValue];
netStream.Read(bytes, 0, bytes.Length);
client.Close();
}
catch (Exception ex)
{
_log.Warn("An error occurred receiving a message", ex);
}
// Do stuff with message
}
На моей машине для разработки все работает как положено; сообщения принимаются, когда я отправляю их с помощью консольного приложения, а другие сообщения не принимаются.
Однако в Azure (Classic Cloud Service) из журналов видно, что мы получаем соединения, которые не были инициированы нами. Эти соединения приводят к исключению "соединение принудительно закрыто удаленным хостом", когда мы пытаемся прочитать из потока:
netStream.Read(bytes, 0, bytes.Length);
Может ли это быть что-то в архитектуре Azure, которая отслеживает службу, чтобы убедиться, что она прослушивает порт, настроенный в конфигурации конечной точки?
Есть ли способ определить эти связи? В настоящее время я завернул код в try/catch, но я не уверен, что это лучший способ сделать это.
Любой совет будет принята с благодарностью!