每50秒WCF请求延迟

时间:2017-01-05 13:45:16

标签: c# .net wcf wcf-configuration

我有一个简单的WCF服务,可以将图像流式传输到客户端。在客户端上,对图像的第一次请求大约需要5.5秒,然后后续请求大约需要40ms,这很好。

然而,每隔约45秒,无论是否有任何请求,下一个请求总是需要大约4.6秒。这个45秒的循环不断重复。

我正在使用带流传输模式的net.tcp绑定。我已经尝试了启用/不启用可靠会话的缓冲传输模式,但所有这些都增加了每个请求所花费的时间。

我尝试过不增加每个绑定超时(打开,关闭,发送,接收,不活动)。

服务器配置:

serviceHost = new ServiceHost(typeof(TServiceImplementation), serviceUri);
serviceHost.Description.Behaviors.Add(new ServiceMetadataBehavior() { HttpGetEnabled = false });

var netTCPBinding = new NetTcpBinding(SecurityMode.Transport);
netTCPBinding.TransferMode = TransferMode.StreamedResponse;
netTCPBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;

serviceHost.AddServiceEndpoint(typeof(TServiceContract), netTCPBinding, ServiceName);
serviceHost.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "mex");

客户端配置:

<system.serviceModel>
<bindings>
  <netTcpBinding>
    <binding name="TcpBinding" transferMode="StreamedResponse" maxReceivedMessageSize="2147483647" />
  </netTcpBinding>
</bindings>
<client>
  <endpoint address="net.tcp://hostname:9000/StreamService"
    binding="netTcpBinding" bindingConfiguration="TcpBinding" contract="StreamService.IStream"
    name="NetTcpBinding_IStream" />
</client>
</system.serviceModel>

更新:看起来这可能是特定于机器的问题 - 当我在本地计算机上运行该服务时,我没有遇到此问题。

1 个答案:

答案 0 :(得分:0)

好的,所以再多一点调查,我已经确定这是一个地址解析问题 - 实际的图像托管在运行服务的机器的不同机器上,所以我更改了配置以使用主机的IP地址而不是计算机名称和问题得到解决。

我猜这与名称缓存超时有关,但没有考虑它可能是哪一个。