Ich habe einen .NET Remoting-Dienst, der die meiste Zeit funktioniert. Wenn eine Ausnahme oder ein Fehler auftritt, protokolliert sie den Fehler in einer Datei, wird jedoch weiterhin ausgeführt..NET Remoting-Dienst scheint abstürzt und reagiert nicht mehr auf Clients
jedoch etwa einmal alle zwei Wochen die Dienstleistungen für die Kunden nicht mehr reagiert, die den Client appication verursacht mit einer Socket mit der folgenden Meldung zum Absturz:
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
Keine Ausnahme oder Stack-Trace wird in unserem Protokoll geschrieben Datei, so kann ich nicht herausfinden, wo der Dienst abstürzt, was mich zu der Annahme verleitet, dass es irgendwo außerhalb meines Codes fehlschlägt. Welche zusätzlichen Schritte kann ich unternehmen, um die Ursache für diesen Absturz herauszufinden? Ich könnte mir vorstellen, dass irgendwo etwas in ein EventLog geschrieben wird, aber ich kenne das Windows-Ereignisprotokollierungssystem nicht sehr gut, so dass ich nicht genau weiß, wo ich es suchen soll.
Vielen Dank im Voraus für jede Hilfe mit diesem.
EDIT: Vergessen zu erwähnen, stoppen oder neu starten der Dienst tut nichts, der Dienst reagiert nie. Ich muss den Prozess manuell beenden, bevor ich den Dienst erneut starten kann.
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();
}
}
Vielleicht müssen Sie Ihren Code überprüfen, wo Sie die Protokollierung tun, und wenn es einen Fehler gibt, beenden oder die Verbindung erneut versuchen .. – MethodMan
Nun, ich weiß, ich muss die Ausnahme auf der Client-Seite zu fangen, aber ich bin versuchen herauszufinden, was den Remote-Dienst zum Absturz bringt. –
Haben Sie eine Codeüberprüfung durchgeführt, um sicherzustellen, dass Sie Objekte freigeben, die gerade erstellt werden? das scheint normalerweise das Problem mit vielen Entwicklern beim Programmieren von Dienstprogrammen zu sein. Kannst du einen Ausschnitt aus deinem Code einfügen? vielleicht würde ein zweites Paar Augen helfen – MethodMan