使用WCF服务时,每次使用它时最好创建一个新的服务实例吗?或者创建一个并重新使用它会更好吗?为什么这两种方法都更好?异步代理是否一样?WCF服务代理生命周期的最佳实践?
回答
除了东西盖伊星巴克提到的一个关键因素将是你使用(与会议要求一起)的安全模式 - 如果你不要再使用你的代理,你不能重新使用安全会话。
这意味着客户端必须验证自己与每个电话是浪费。
但是,如果您决定这是您想要做的事情,请确保将客户端配置为不建立安全上下文(因为您永远不会使用它),这将为您节省一些往返服务器的时间:-)
这里有一个关于.NET Remoting中的服务器激活对象(由WCF替代的技术之一)的推论,它有两种模式,“单一调用”(无状态)和“单身”(有状态)。
你在WCF采用的方法,应根据你的表现,并与你的消费者的需求相结合比例要求,以及服务器端的设计约束。
如果你必须保持服务调用之间的状态,那么显然你想拥有一个有状态的实例,但是如果你不这样做,你应该实现它,以便它是静态的,它应该更好地扩展(你可以更轻松地进行负载平衡等)。
还有一点要考虑的是通道故障。通过设计WCF不允许在未处理的异常发生后使用客户端代理。
IMyContract proxy = new MyContractClient();
try
{
proxy.MyMethod();
}
catch
{}
//Throws CommunicationObjectFaultedException
proxy.MyMethod();
或者是它最好创建一个和重新使用它?
不要开始实施您自己的池实施。这已经在框架中完成了。 WCF代理使用下面的缓存渠道工厂。因此,创建新的代理并不太昂贵(但请参阅Guy Starbuck关于会话和安全性的回复!)。
另请注意,某个空闲时间(默认为10分钟)后代理服务器超时。
如果你想更明确的控制你可以考虑使用ChannelFactories和渠道,而不是直接的“容易去,全开箱” ClientBase代理。
http://msdn.microsoft.com/en-us/library/ms734681.aspx
和一个“必须阅读”关于这个话题是: http://blogs.msdn.com/wenlong/archive/2007/10/27/performance-improvement-of-wcf-client-proxy-creation-and-best-practices.aspx
- 1. 弃用WCF服务的最佳实践
- 2. 大型WCF服务的最佳实践?
- 3. 最佳实践WCF服务 - Windows Azure的
- 4. Alfresco - 自定义文档生命周期的最佳实践(Java?)
- 5. 哪个Structuremap生命周期是最佳实践? (v2.5.4)
- 6. WCF服务客户端生命周期
- 7. Web服务和单例WCF服务的WCF生命周期?
- 8. 最佳实践:AmazonS3服务
- 9. 生命周期服务
- 10. 服务生命周期
- 11. WCF和错误处理,最佳实践
- 12. 多个WCF服务的最佳实践要求
- 13. Silverlight使用Wcf服务的最佳实践?
- 14. 使用WCF版本化服务的最佳实践?
- 15. 使用WCF Web服务时的最佳实践身份验证
- 16. 最佳实践的服务和数据契约 - WCF
- 17. WCF生命周期事件
- 18. Wcf请求生命周期
- 19. WCF,Ninject和生命周期
- 20. 安卓GPS服务的最佳实践
- 21. 多个IdentityServer4服务的最佳实践
- 22. 创建Web服务的最佳实践
- 23. 内部web服务的最佳实践
- 24. 管理WCF客户端的实例生命周期
- 25. WCF实体验证的最佳实践
- 26. 最佳实践 - 服务/ dao /业务层中的异常处理
- 27. WCF/WPF最佳实践 - WCF ChannelFactory和PRISM
- 28. IIS托管(http)WCF服务的生命周期是什么?
- 29. 引用WCF服务的生命周期是什么?
- 30. 取代onLeave的最佳生命周期方法
我相信布莱恩问的客户端代理的重用。这与服务器端实例的生命周期无关 – 2009-11-28 16:26:32