2012-06-15 19 views
1

我正在使用命名管道的WCF服务,它有大约1000个方法(是的,我知道这不是一个好的做法,但它是生命.. )。启动WCF服务需要10秒的时间与一个有1000个方法的大服务合同

我得到的问题是,当启动WCF服务时,它在构造函数ServiceHost类上花费大约10秒。通过追踪它,我发现时间花在准备服务描述(InitializeDescription方法ServiceHostBase类)上。我想这是因为这个服务合约中定义的方法太多了。

任何人都可以帮忙解答我该如何加快这个大服务合同的启动时间?

我知道在一个服务合同中定义如此多的方法并不是一个好习惯。但是我不能改变服务合同(比如把它分成几个小合同)。你知道,这是真实的生活...

谢谢。

+6

如果不能重构可怕的设计是你的生活,那么我强烈建议改变你的生活。 WCF必须找到它需要发布的所有方法和类型来创建元数据(WSDL等),这些元数据和方法的类型和方法越多,其固有的速度越慢。 – CodeCaster

+0

好的ieal :)但改变我的生活并不是我在短期内的计划。回到问题。此WCF服务驻留在桌面应用程序(基于Windows)中,用于与其他进程进行通信。合同中定义的所有方法都是必需的。用户可以随时启动此应用程序,并可以调用1000个中的任何一个操作。所以我们必须在启动时准备好所有的方法。我想知道我是否可以加快准备时间。例如,在开始之前“预先准备”他们?也许在开始之前“预先编译”它和相同的文件? – Alex

回答

1

重构这个端点,同时不平凡的,可能是很容易做,如果你正确地管理流程:

  1. 选择,你的端点当前支持单个逻辑的商业案例。
  2. 创建完成此单一逻辑业务操作所需的所有操作的列表。
  3. 为这些操作创建一个新端点,保持相同的操作签名。
  4. 将任何想要完成此业务案例的现有消费者重新指向新端点。
  5. 重复流程,直到您覆盖所有业务案例。

道歉这不直接解决原来的问题,并感谢在这个规模重新工作可能超出您当前的发展范围。

+0

谢谢。不幸的是,我们即将发布... – Alex

+2

非常感谢您的所有伟大建议。 最后,我决定对它进行重构,我决定了!我设法将大合同拆分为几个较小的合同,并将它们托管在几个WCF主机中。现在用来初始化WCF主机的时间缩短到不到1.5秒。 所以,请记住在放弃之前尽力而为~~~ – Alex

+0

不错 - 享受您的新服务! –