Possiedo un servizio .NET Remoting che funziona bene la maggior parte del tempo. Se si verifica un'eccezione o un errore, registra l'errore in un file ma continua a essere eseguito.Il servizio remoto .NET sembra arrestarsi in modo anomalo e smette di rispondere ai client.
Tuttavia, circa una volta ogni due settimane il servizio smette di rispondere ai clienti, che provoca l'appication cliente a schiantarsi con un SocketException con il seguente messaggio:
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
Nessuna eccezione o traccia dello stack è scritto al nostro registro file, quindi non riesco a capire dove il servizio si sta bloccando, il che mi porta a credere che sia fuori dal mio codice che sta fallendo. Quali ulteriori passaggi posso prendere per capire la causa principale di questo crash? Immagino che scriva qualcosa su un EventLog da qualche parte, ma non ho molta familiarità con il sistema di registrazione degli eventi di Windows, quindi non sono esattamente sicuro su dove cercare.
Grazie in anticipo per qualsiasi tipo di assistenza.
MODIFICA: Ha dimenticato di menzionare, l'arresto o il riavvio del servizio non fa nulla, il servizio non risponde mai. Devo interrompere manualmente il processo prima di poter riavviare il servizio.
EDIT 2:
public class ClientInfoServerSinkProvider :
IServerChannelSinkProvider
{
private IServerChannelSinkProvider _nextProvider = null;
public ClientInfoServerSinkProvider()
{
}
public ClientInfoServerSinkProvider(
IDictionary properties,
ICollection providerData)
{
}
public IServerChannelSinkProvider Next
{
get { return _nextProvider; }
set { _nextProvider = value; }
}
public IServerChannelSink CreateSink(IChannelReceiver channel)
{
IServerChannelSink nextSink = null;
if (_nextProvider != null)
{
nextSink = _nextProvider.CreateSink(channel);
}
return new ClientIPServerSink(nextSink);
}
public void GetChannelData(IChannelDataStore channelData)
{
}
}
public class ClientIPServerSink :
BaseChannelObjectWithProperties,
IServerChannelSink,
IChannelSinkBase
{
private IServerChannelSink _nextSink;
public ClientIPServerSink(IServerChannelSink next)
{
_nextSink = next;
}
public IServerChannelSink NextChannelSink
{
get { return _nextSink; }
set { _nextSink = value; }
}
public void AsyncProcessResponse(
IServerResponseChannelSinkStack sinkStack,
Object state,
IMessage message,
ITransportHeaders headers,
Stream stream)
{
IPAddress ip = headers[CommonTransportKeys.IPAddress] as IPAddress;
CallContext.SetData("ClientIPAddress", ip);
sinkStack.AsyncProcessResponse(message, headers, stream);
}
public Stream GetResponseStream(
IServerResponseChannelSinkStack sinkStack,
Object state,
IMessage message,
ITransportHeaders headers)
{
return null;
}
public ServerProcessing ProcessMessage(
IServerChannelSinkStack sinkStack,
IMessage requestMsg,
ITransportHeaders requestHeaders,
Stream requestStream,
out IMessage responseMsg,
out ITransportHeaders responseHeaders,
out Stream responseStream)
{
if (_nextSink != null)
{
IPAddress ip =
requestHeaders[CommonTransportKeys.IPAddress] as IPAddress;
CallContext.SetData("ClientIPAddress", ip);
ServerProcessing spres = _nextSink.ProcessMessage(
sinkStack,
requestMsg,
requestHeaders,
requestStream,
out responseMsg,
out responseHeaders,
out responseStream);
return spres;
}
else
{
responseMsg = null;
responseHeaders = null;
responseStream = null;
return new ServerProcessing();
}
}
Forse hai bisogno di controllare il tuo codice dove stai facendo il logging e se c'è un errore devi uscire o riprovare la connessione .. – MethodMan
Beh, so che ho bisogno di catturare l'eccezione sul lato client, ma sono cercando di capire cosa sta causando l'arresto anomalo del servizio remoto. –
Hai fatto una revisione del codice per assicurarti di liberare oggetti che vengono creati ..? che di solito sembra essere il problema con un sacco di sviluppatori durante la codifica delle applicazioni di servizio .. puoi incollare uno snippet del tuo codice ..? forse un secondo paio di occhi aiuterebbe – MethodMan