命名管道回调需要10秒
本文关键字:10秒 回调 管道 | 更新日期: 2023-09-27 18:20:31
得到了wcf dll,其中包含客户端和服务器类。
当我的服务器使用回调时,我的客户端需要超过10秒才能得到它。
发生了什么事?
只得到最简单的NetNamedPipeBinding端点。
有很多代码,所以我不知道该在这里粘贴什么。
是什么原因导致这么长时间。
编辑:仅第一次回调需要10秒。。
在这之后,它工作得很快。
谁知道为什么?
我也遇到过类似的问题。这对我的情况有所帮助:
NetNamedPipeSecurity security = new NetNamedPipeSecurity() { Mode = NetNamedPipeSecurityMode.None };
创建绑定时传递此安全对象:
new NetNamedPipeBinding() { Security = security }
最初的想法就是从这里开始的。线程是关于TCP绑定的,但最后给出的解决方案似乎对命名管道也有帮助。
更简单的做法是:
new NetNamedPipeBinding(NetNamedPipeSecurityMode.None)
没有任何帮助。我最后添加了一个假的呼叫装饰器。其在系统启动时发送第一个调用。
我偶然发现了一个设置,它大大提高了第一个WCF请求的性能。时间从>10秒下降到约2秒。
在服务器和客户端上将绑定的TransferMode属性设置为Streamed:
var binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
binding.TransferMode = TransferMode.Streamed;
然后将绑定传递到AddServiceEndpoint服务器端和Channelfactory构造函数客户端。
您是如何托管服务的?第一个调用需要创建启动速度较慢的服务。
调试时,我使用Studio的内置服务主机,这通常需要几秒钟的时间来自行解决。我想我从来没有见过它需要10秒。