2008-12-01 117 views

回答

5

除了东西盖伊星巴克提到的一个关键因素将是你使用(与会议要求一起)的安全模式 - 如果你不要再使用你的代理,你不能重新使用安全会话。

这意味着客户端必须验证自己与每个电话是浪费。

但是,如果您决定这是您想要做的事情,请确保将客户端配置为不建立安全上下文(因为您永远不会使用它),这将为您节省一些往返服务器的时间:-)

3

这里有一个关于.NET Remoting中的服务器激活对象(由WCF替代的技术之一)的推论,它有两种模式,“单一调用”(无状态)和“单身”(有状态)。

你在WCF采用的方法,应根据你的表现,并与你的消费者的需求相结合比例要求,以及服务器端的设计约束。

如果你必须保持服务调用之间的状态,那么显然你想拥有一个有状态的实例,但是如果你不这样做,你应该实现它,以便它是静态的,它应该更好地扩展(你可以更轻松地进行负载平衡等)。

+0

我相信布莱恩问的客户端代理的重用。这与服务器端实例的生命周期无关 – 2009-11-28 16:26:32

5

还有一点要考虑的是通道故障。通过设计WCF不允许在未处理的异常发生后使用客户端代理。

IMyContract proxy = new MyContractClient(); 
try 
{ 
    proxy.MyMethod(); 
} 
catch 
{} 

//Throws CommunicationObjectFaultedException 
proxy.MyMethod(); 
15

或者是它最好创建一个和重新使用它?

不要开始实施您自己的池实施。这已经在框架中完成了。 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