Çoğu zaman iyi çalışan bir .NET Remoting hizmeti var. Bir istisna veya hata olursa, hatayı bir dosyaya kaydeder, ancak yine de çalışmaya devam eder..NET uzaktan görüntüleme hizmeti çöküyor ve istemcilere yanıt vermiyor.
Ancak yaklaşık bir kere aşağıdaki iletiyi içeren bir SocketException ile çökmesine istemci appication neden hizmet müşterilerine yanıt vermiyor iki haftada:
İstisna yok ya yığın izleme bizim günlüğüneA 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
yazılır Bu yüzden hizmetin nerede kilitlendiğini anlayamıyorum, bu da benim kodumun dışında bir yerde başarısız olduğuna inanmamı sağlıyor. Bu çökmenin temel nedenini anlamak için hangi ek adımları atabilirim? Bir yerdeki EventLog'a bir şeyler yazdığını düşünürdüm ama Windows 'Event Logging sistemine aşina değilim, bu yüzden nereye bakacağından tam olarak emin değilim.
Bu konuyla ilgili herhangi bir yardım için şimdiden teşekkür ederiz.
DÜZENLEME: Hizmetin durdurulması veya yeniden başlatılmasının hiçbir şey yapmaması, hizmetin hiçbir zaman yanıt vermediğinden bahsetmeyi unutmayınız. Servisi tekrar başlatabilmem için işlemi el ile öldürmem gerekiyor.
DÜZENLEME 2: Bu, bir dostu aramak zaman kimse telefonunu eline nedenini öğrenmek için çalışmak gibidir
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();
}
}
Belki de kodunuzu günlüğe kaydetme işleminizi yapıyorsanız ve bir hata varsa, çıkın ya da bağlantıyı yeniden deneyin. – MethodMan
İstemci tarafında özel durumu yakalamam gerektiğini biliyorum. uzaktan hizmetin neden çökmesine sebep olduğunu anlamaya çalışmak. –
Oluşturulmakta olan Nesneleri yayınladığınızdan emin olmak için bir kod incelemesi yaptınız ..? Bu genellikle Servis uygulamalarını kodlarken birçok geliştiricinin problemi gibi görünüyor. Kodunuzun bir parçasını yapıştırabiliyorsunuz ..? belki de ikinci bir çift göz yardımcı olur – MethodMan