我不能否认使用双工异步调用的性能优势,但有一些地方让我感到担忧。
我的担心是,如果给定一个实例化的客户端对象,WCF是否能够确定哪个特定的客户端服务实例将接收回调参数?
有人能告诉我这是否是一个好主意吗?如果不是,为什么不是?
new DuplexChannelFactory<IServerWithCallback>(
new ClientService(),
new NetTcpBinding(),
new EndpointAddress("net.tcp://localhost:1234/"+Guid.NewGuid()))
如果上面的虚拟路径是保留的,那么如何废弃它?我希望客户端服务的生命周期很短,即发出请求并收到响应后立即终止。将客户端服务的生命周期设置短与保持其长时间运行并池化相比,性能损失有多严重?
这样做是为了避免超时问题。在接收、发送完毕后尽快销毁。按照惯例 - 不能传递客户端服务。如果需要信息,请创建新的服务,就像 EF/L2S 等一样。
从 WCF 服务内部,如何关闭与客户端的会话。例如,我不想让客户端结束会话 - 我知道可以相应地装饰我的操作,但是当满足某些条件时,我希望服务能够自己编程地终止。
我可以附加端口并相应地转发以解决任何防火墙问题,但我担心的是如果客户端位于负载均衡器后面。该服务如何知道调用哪个特定服务器?