2010-08-11 67 views
2

我有一个是在多个应用程序复制的DAL(我知道它的一个不好的设计,但忽略这个现在),我想要做的就是这个...WCF DAL COMPONENT

创建一个WCF DAL组件,它将通过所有的桌面应用程序访问..任何人都可以分享他们的想法后?

  1. 我打算使用TCP结合
  2. 会有什么在性能方面的开销(由于1个DAL组件将通过多个应用程序b消耗)???
  3. 因为TCP绑定只能托管在IIS-7.0上,所以这会成为硬件+ s/w方面的另一个开销(或者有可能将HTTP绑定在顶层,并且TCP可以在其下方,这样我就可以使用IIS版本5或6)
  4. 我可以有多个应用多个端点,是从视图服务表现点好,因为它会帮助我们为不同的客户端应用程序创建不同的线程,可以在未来的差异合同以及使一个应用程序就会受到影响,由于在变化DAL ..
  5. 在这种情况下(我们预计每天有100个并发用户的流量),哪种实例模式更受欢迎,并且DAL已经使用SINGLETON设计模式处理这种情况。

让我知道你对上述所有要点的想法,并且如果你能提供给我更多关于这方面的见解......将会是gr8。

在此先感谢...

+0

TCP绑定也可以自托管,并且可以在WAS中托管(与IIS中的托管不同)。 – 2010-08-11 05:11:24

回答

3

让我回答几个:

1)NetTcpBinding的是一个伟大的结合 - 速度非常快,性能非常好 - 与肯定去!

3)IIS 7.0中的主机,或者自主主机 - 写一点Windows NT服务并自己处理主机。为您提供更多的控制权,以及手动启动和停止DAL服务的能力。我甚至不打算试图让NetTcp在IIS5/6上进行某种欺骗/破解 - 浪费时间。

4)同一个绑定的多个端点既没有用,也没有帮助性能。

5)我总是会使用“Per-Call”。每个服务请求获取自己的服务实例,处理该呼叫,然后完成。这使得对WCF服务实现进行编程变得很简单 - 如果你是单身人士,任何性能都可以,你需要担心多线程和线程安全的编程 - 真的是一团糟。不要这样做。不,只是不这样做。

DAL应该始终是无状态的,并且应该在“尽快打开数据库连接,尽快完成工作并尽快关闭连接”的模式下运行,该模式非常适合每次呼叫实例模式。当你的服务请求进入时,连接被打开(这些连接在ADO.NET的连接池中,无论如何,在服务器端),工作完成,连接再次关闭。

+0

感谢marc_s, 1以上查询 - 根据您的回复 - >再次,这一点对于在每个呼叫实例模式完美契合。当你的服务请求进入时,连接被打开(这些连接被集中在ADO的连接池中。NET,无论如何,在服务器端),工程完成,连接再次关闭 这是否意味着这只适用于每个呼叫?如果是,那么对于其他2个选项(单个和每个会话)什么是 – Amit 2010-08-11 06:18:53

+0

@Amit:如果您使用每个会话,我仍然会打开每个服务方法的连接,执行您需要执行的操作并再次关闭它。在单身人士的情况下,你有两种选择:这样做,或者一直保持一个连接打开,并通过该连接完成所有请求。但是:当你同时有多个同时请求被单例处理时,这会变得非常多毛和具有挑战性.....我不想确保在这种情况下没有任何问题......非常非常棘手的业务..... – 2010-08-11 08:47:23