Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF服务启动需要10秒钟,一个大型服务合同有1000个方法_Wcf_Service_Contract - Fatal编程技术网

WCF服务启动需要10秒钟,一个大型服务合同有1000个方法

WCF服务启动需要10秒钟,一个大型服务合同有1000个方法,wcf,service,contract,Wcf,Service,Contract,我正在使用一个命名管道WCF服务,它有大约1000个方法(是的,我知道这不是一个好的实践,但它的生命…) 我遇到的问题是,当启动WCF服务时,在ServiceHost类的构造函数上花费大约10秒。通过跟踪,我发现时间花在了准备服务描述上(InitializeDescriptionmethodofServiceHostBaseclass)。我猜这是因为在这个服务合同中定义了太多的方法 任何人都可以帮助回答如何加快这一大型服务合同的启动时间? 我知道在一个服务合同中定义这么多方法不是一个好做法。但我

我正在使用一个命名管道WCF服务,它有大约1000个方法(是的,我知道这不是一个好的实践,但它的生命…)

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

任何人都可以帮助回答如何加快这一大型服务合同的启动时间?

我知道在一个服务合同中定义这么多方法不是一个好做法。但我不能更改服务合同(例如将其划分为几个较小的合同)。你知道,这是真实的生活


谢谢。

重构此端点虽然不是一件小事,但如果您正确管理流程,可能会非常容易:

  • 选择端点当前支持的单个逻辑业务案例
  • 创建完成此单一逻辑业务操作所需的所有操作的列表
  • 仅为这些操作创建一个新端点,保留相同的操作签名
  • 将希望完成此业务案例的所有现有消费者重新指向新端点
  • 重复此过程,直到涵盖所有业务案例
    抱歉,这并没有直接解决最初的问题,并感谢您在目前的开发范围之外重新进行此规模的工作

    重构此端点虽然不是一件小事,但如果您正确管理流程,重构此端点可能相当容易:

  • 选择端点当前支持的单个逻辑业务案例
  • 创建完成此单一逻辑业务操作所需的所有操作的列表
  • 仅为这些操作创建一个新端点,保留相同的操作签名
  • 将希望完成此业务案例的所有现有消费者重新指向新端点
  • 重复此过程,直到涵盖所有业务案例
    抱歉,这并没有直接解决最初的问题,并感谢您在目前的开发范围之外重新进行此规模的工作

    如果不能重构糟糕的设计是你的生活,那么我强烈建议改变你的生活。WCF必须找到它需要发布的所有方法和类型来创建元数据(WSDL等),拥有的类型和方法越多,元数据的速度就越慢。好的ieal:)但改变我的生活不是我短期内的计划。回到问题上来。此WCF服务驻留在一个桌面应用程序(基于Windows)的自主机中,用于与另一个进程通信。合同中定义的所有方法都是必要的。用户可以随时启动此应用程序,并可以调用1000个操作中的任意一个操作。因此,我们必须在启动时准备所有方法。我想知道我是否可以加快时间来准备它们。例如,在开始之前“预先准备”它们?也许在开始之前对它进行“预编译”并将其复制到某个文件中?如果不能重构糟糕的设计是你的生活,那么我强烈建议你改变你的生活。WCF必须找到它需要发布的所有方法和类型来创建元数据(WSDL等),拥有的类型和方法越多,元数据的速度就越慢。好的ieal:)但改变我的生活不是我短期内的计划。回到问题上来。此WCF服务驻留在一个桌面应用程序(基于Windows)的自主机中,用于与另一个进程通信。合同中定义的所有方法都是必要的。用户可以随时启动此应用程序,并可以调用1000个操作中的任意一个操作。因此,我们必须在启动时准备所有方法。我想知道我是否可以加快时间来准备它们。例如,在开始之前“预先准备”它们?也许“预编译”它,并在开始之前将其复制到某个文件中?非常感谢您所有的好建议。最后,我决定重构它,我做到了!我设法将大型合同拆分为几个较小的合同,并将它们托管在几个WCF主机中。现在,用于初始化WCF主机的时间减少到1.5秒以下。所以,记住在放弃之前要尽你最大的努力~~~很好的一个-享受你的新服务!非常感谢你所有的好建议。最后,我决定重构它,我做到了!我设法将大型合同拆分为几个较小的合同,并将它们托管在几个WCF主机中。现在,用于初始化WCF主机的时间减少到1.5秒以下。所以,记住在放弃之前要尽你最大的努力~~~很好的一个-享受你的新服务!