【发布时间】:2017-01-05 13:45:16
【问题描述】:
我有一个简单的 WCF 服务,可以将图像流式传输到客户端。在客户端,第一个图像请求大约需要 5.5 秒,然后后续请求大约需要 40 毫秒,这很棒。
但是,每约 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>
更新:看起来这可能是特定于机器的问题 - 当我在本地机器上运行该服务时,我没有遇到此问题。
【问题讨论】:
-
更改超时时间只会影响系统在声明错误之前等待响应的时间,它对您的响应速度没有影响,听起来您的应用程序池正在回收,这将删除您的服务并重新创建它需要几秒钟的正常运行时间,所以我会查看您的 IIS 设置
-
它作为 Windows 服务运行,所以这可能不是问题。
标签: c# .net wcf wcf-configuration