如何解决进程托管网络命名管道绑定挂起并停止接收进一步的请求
我有一个进程(Windows服务)A和一个进程B(控制台应用程序)。
B使用netNamedPipeBinding公开WCF端点。
关于其服务合同:
[ServiceContract(
SessionMode = SessionMode.Allowed,CallbackContract = typeof(ICallback))]
public interface IServiceManager
{
[OperationContract(IsOneWay = true)]
void GetSomething(List<string> strs,string id);
}
实施方式:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,ConcurrencyMode =ConcurrencyMode.Multiple)]
public class ServiceManager : IServiceManager
{
public void GetSomething(List<string> strs,string id)
{
回调合同为:
public interface ICallback
{
[OperationContract(IsOneWay = true)]
void Report(List<Response> Response,string id);
}
此服务中的方法(GetSomething)将调用远程过程,并通过回叫合同将答复返回给A。并将回调和服务中的操作合同均设置为OneWay = true。
进程A定期向进程B发出呼叫(每分钟100个呼叫),并通过回叫合同从B接收响应。
问题是: 此设置运行良好,但在某些请求(1000-2000)之后,进程B正在运行,但停止接收来自A或任何其他进程的任何调用,并且甚至不会引发错误,因为该调用是单向的。 (即使由A调用,进程B中的方法也不会调用)
这也不像进程B已经在处理旧请求。它执行了所有操作,并为以前的所有请求调用了回调。
通过一个连接发送的所有呼叫。该连接是通过以下方式创建的:
_factory = new DuplexChannelFactory<IServiceManager>(context,binding,address);
_serviceManager = _factory.CreateChannel();
连接仅一次打开,所有请求仅通过此通道,并且永远不会第二次打开,甚至不会出错。
当B停止接收我执行ctrl + C来停止控制台/ powershell中的进程的所有请求时,它开始接收所有排队的请求。
请注意,B中没有长时间运行的进程,它只是停止接收新的请求,并且在按ctrl + c组合键之后将其全部接收。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。