【问题标题】:WCF service starts up takes 10 seconds with a big service contract having 1000 methodsWCF 服务启动需要 10 秒,具有 1000 个方法的大型服务合同
【发布时间】:2012-06-15 10:05:35
【问题描述】:

我正在使用命名管道 WCF 服务,它有大约 1000 种方法(是的,我知道这不是一个好习惯,但它是生活......)。

我遇到的问题是,在启动 WCF 服务时,ServiceHost 类的构造函数大约需要 10 秒。通过跟踪,我发现时间都花在了准备服务描述上(ServiceHostBase 类的InitializeDescription 方法)。我猜是因为这个服务契约中定义的方法太多了。

哪位大神可以帮忙解答一下如何才能加快这个大服务合同的启动时间?

我知道在一个服务合同中定义这么多方法并不是一个好习惯。但我无法更改服务合同(例如将其分成几个较小的合同)。你知道,这才是真正的生活……

谢谢。

【问题讨论】:

  • 如果不能重构糟糕的设计是你的生活,那么我强烈建议你改变你的生活。 WCF 必须找到它需要发布的所有方法和类型以创建元数据(WSDL 等),当你拥有的类型和方法越多时,它本身就会越慢。
  • 好 ieal :) 但改变我的生活并不是我近期的计划。回到问题上来。此 WCF 服务驻留在自托管的桌面应用程序(基于 Windows)中,用于与另一个进程通信。合同中定义的所有方法都是必需的。用户可以随时启动这个应用程序,并且可以调用1000个操作中的任何一个操作。所以我们要在启动的时候准备好所有的方法。我想知道我是否可以加快准备它们的时间。例如,在开始之前“预先准备”它们?也许在开始之前“预编译”它并与某个文件相同?

标签: wcf service contract


【解决方案1】:

如果你正确地管理流程,重构这个端点虽然不简单,但可能相当容易做到:

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

很抱歉,这并没有直接解决原始问题,并且感谢在这种规模上重新工作可能超出了您当前开发的范围。

【讨论】:

  • 非常感谢您提出的所有建议。最后,我决定重构它,我做到了!我设法将大合同拆分为几个较小的合同,并将它们托管在几个 WCF 主机中。现在用于初始化 WCF 主机的时间减少到不到 1.5 秒。所以,在放弃之前,记得要努力哦~~~
  • 不错 - 享受您的新服务!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多