我有一个简单的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>
更新:看起来这可能是特定于机器的问题 - 当我在本地计算机上运行该服务时,我没有遇到此问题。
答案 0 :(得分:0)
好的,所以再多一点调查,我已经确定这是一个地址解析问题 - 实际的图像托管在运行服务的机器的不同机器上,所以我更改了配置以使用主机的IP地址而不是计算机名称和问题得到解决。
我猜这与名称缓存超时有关,但没有考虑它可能是哪一个。