【问题标题】:Wcf first request is slow? Solution on service?wcf第一次请求很慢?服务解决方案?
【发布时间】:2014-06-06 13:25:12
【问题描述】:

每当我的 WCF 服务空闲一段时间(大约 15 分钟或更长时间)时,都需要一些时间来初始化新请求。通常响应时间是 2-3 秒,第一次请求大约是 30 秒。实际上,它与此处解释的帖子相似。 Why is the first WCF client call slow?

但通道工厂的解决方案似乎在客户端,它仅适用于自动生成代理时。我正在寻找服务器端的解决方案,因为我的客户端没有使用任何代理类或 wsdl 类。它只是将请求构建为字符串并发出 http post 请求。 无论如何,如果我要提供 B2B 网络服务,要说我的客户在他们的客户端做一个变通方法并不容易。 我正在使用 https。也可能是问题所在?

编辑:我检查了服务器上已设置为 0 的 IIS 空闲时间。

EDIT2:当我查看我的旅行日志时,我没有看到任何详细信息。下面是我在 web.config 中的跟踪代码的外观和截图。也许我需要延长恍惚信息,但如何?

 <system.diagnostics>
  <sources>
  <source name="System.ServiceModel" switchValue="Information, ActivityTracing" propagateActivity="true">
    <listeners>
      <add name="traceListener" type="System.Diagnostics.XmlWriterTraceListener" initializeData="c:\log\Traces.svclog"/>
    </listeners>
  </source>
  <source name="System.ServiceModel.MessageLogging">
    <listeners>
      <add name="xml" initializeData="c:\log\MessageLog.log"/></listeners>
  </source>  
</sources>

感谢您的建议。

【问题讨论】:

    标签: c# wcf soap


    【解决方案1】:

    我怀疑这与空闲时间后进程的回收和终止有关。 IIS 上的每个应用程序都在某个 AppPool 下运行。我已经检查了我在 DefaultAppPool (win 8.1) 上的设置,这些设置如下。

    我知道您写道,您将服务器上的 IIS 空闲时间设置为 0。但是您检查过正确的应用程序池吗?是我在第一个屏幕截图中显示的这个值吗?

    我还会检查一些 w3p 进程(负责您的 WCF 应用程序并在您设置的 AppPool 身份下运行)是否不再存在于服务器上。另外,我会尝试自行托管 WCF 服务,以检查是否是 IIS 或其他地方的问题。

    【讨论】:

    • 感谢您的回复。是的,我也在检查 DefaultAppPool。这不应该是问题。为了在不回收的情况下测试它,我也将这个设置为 0,除了我自己的测试之外没有其他流量。但不幸的是,它正在发生。我怀疑两件事。其中1个是我原帖中url中提到的频道工厂,另一个是https。我也会试试你的建议。
    • 我不认为 https 可能是原因。此外,您写道您没有使用代理,因此它不应该是通道工厂的错误。但我很好奇它会是什么。
    • 当我在服务器上启用我的跟踪时,它显示我的请求在 6 秒内处理,但在提琴手处理时间是 25 秒。当我比较客户端连接到服务器的时间戳时,也与我的跟踪日志中的不同。如果我做第二个请求,这个时间处理时间在提琴手和跟踪日志之间匹配。连接到服务器时间戳的客户端也匹配。这意味着空闲大约 10 分钟后的第一个请求不会立即执行。但是如何在开始处理之前查看那里发生了什么?你有什么线索吗?简单的跟踪日志不显示详细信息
    • 发送第一个请求时是否启动了新的 w3p 进程?
    • 我相信你的意思是w3wp进程。如果它是观察它的最佳工具,我不会在任务管理器上观察任何新进程。
    猜你喜欢
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2015-11-22
    • 2019-10-14
    • 2016-12-06
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多