在ASP.Net应用程序和最佳实践中使用WCF

The*_*onk 14 asp.net wcf

我是WCF的新手.我很确定它会像常规的Web服务一样工作 - 而且我也很确定我也做错了,但现在我想确保我做得对.

我们的ASP.Net应用程序通过互联网连接到WCF服务.我已经实现了基本的安全性并使用了SSL.它工作正常,但比我们定期进行Web服务时要慢.返回的数据基本上与常规Web服务相同.

当我使用常规Web服务时,无论何时我需要获取数据,我都会创建一个新的服务对象并为我需要的数据调用函数.这似乎工作正常,但正如我想象的那样,不是最好的方法,特别是如果有成千上万的用户同时连接.因此,当我转换为WCF时,我决定保持一个客户端打开,并且只为连接到该站点的每个人使用它.我把它放在缓存中,当缓存转储对象时,我有一个回调函数来处理它.

现在我甚至都没想过,直到我改变这一切之后,这可能会给多人连接造成问题.如果人A请求数据,则人B必须等待其完成才能通过服务获取他们的数据.

所以我把它改成了基于会话的.我要么实施了这个错误,要么只是适得其反,因为它根本不能正常工作.客户端会超时,导致故障,或者只是不能正常工作.我把它改回原来的缓存,似乎工作正常(除了慢).

这种情况的"最佳实践"是什么?我是否需要在需要时动态创建客户端,创建一个基于会话(并弄清楚我做错了什么),或保持原样并使用一个客户端缓存方法?

Ant*_*nes 6

这种问题通常通过维护池来解决.池不是仅在一个极端中具有一个服务对象而在另一个极端中具有每个用户一个,而是将拥有支持其服务的并发需求所需的服务对象的集合.因此,池应该只增长到最大需求点.

您可以确保在服务对象内部的任何其他超时之前从对象中删除对象,并确保它们在有任何异常时退出.

这样,您就没有多个客户端请求等待访问单个对象,也没有闲置的对象在服务中闲置,并且可能会在它们可以再次重用之前死亡.