gpt4 book ai didi

c# - .NET 远程服务看似崩溃,并停止响应客户端

转载 作者:可可西里 更新时间:2023-11-01 09:11:57 24 4
gpt4 key购买 nike

我有一个 .NET Remoting 服务,它在大多数时间都运行良好。如果发生异常或错误,它会将错误记录到文件中,但仍会继续运行。

但是,服务大约每两周停止一次对客户端的响应,这会导致客户端应用程序崩溃并出现 SocketException,并显示以下消息:

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

没有异常或堆栈跟踪写入我们的日志文件,所以我无法弄清楚服务崩溃的位置,这让我相信它是在我的代码之外的某个地方失败的。我可以采取哪些额外步骤来找出崩溃的根本原因?我想它会在某处向 EventLog 写入一些内容,但我对 Windows 的事件日志系统不是很熟悉,所以我不确定该去哪里查看。

提前感谢您对此提供的任何帮助。

编辑: 忘记提及,停止或重新启动服务没有任何作用,服务从不响应。我需要手动终止进程,然后才能再次启动服务。

编辑 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();
}
}

最佳答案

这就像试图找出为什么当您给 friend 打电话时没有人接电话。问题是他的房子被烧毁了。对正在发生的事情的不完美看法是核心问题,对于服务来说尤其糟糕,因为几乎没有什么可看的。

除非您使用该电话与服务程序员交谈并让他参与解决问题,否则情况不会好转。 有人 将不得不对此进行调试。是的,这会很困难,每两周失败一次可能还不够严重。或者坐等它发生的时间太长了。您可以做的唯一实际的事情就是创建一个进程的小型转储并将其传递给服务程序员,这样他就可以找到一些东西。如果该服务在另一台机器上运行,那么也让 LAN 管理员参与进来。

关于c# - .NET 远程服务看似崩溃,并停止响应客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13865283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com