我创建了一个简单的客户端服务设置,用于从服务器下载应用程序。客户端创建NetNamedPipeBinding并使用它来打开包含该服务的通道以启动下载过程。
private void OpenServiceChannel()
{
InstanceContext instanceContext = new InstanceContext(this);
NetNamedPipeBinding binding = new NetNamedPipeBinding();
DuplexChannelFactory<ICloudProductService> duplexChannelFactory = new DuplexChannelFactory<ICloudProductService>(instanceContext, binding, new EndpointAddress(ADDRESS));
_proxy = duplexChannelFactory.CreateChannel();
}
然后,该服务在同一频道上使用Callback向客户端报告进度。此回调被定义为ServiceContract的一部分:
[ServiceContract(CallbackContract = typeof(IStatusProgressCallback))]
public interface ICloudProductService
{
[OperationContract]
[FaultContract(typeof(ServiceErrorCode))]
Task<IEnumerable<LauncherAppDetails>> GetAvailableApps(string tokenJson);
[OperationContract]
[FaultContract(typeof(ServiceErrorCode))]
Task Install(string tokenJson, LauncherAppDetails app);
}
当服务在需要增加下载进度时触发所述回调中的事件
public interface IStatusProgressCallback
{
[OperationContract]
void OnProgressUpdated(InstallProgress progress);
}
这一切都适用于任何一半体面的互联网连接,因为下载非常快。我的问题是,在慢速连接上,下载的时间超过了绑定的1分钟默认超时。我可以增加此绑定的超时但我担心这不是一个理想的解决方案,因为可能的安全/性能问题是不好的做法。
有没有办法在客户端配置绑定,以便在每次成功回调(保持活动)时刷新超时时间,这样只要服务器传递增量下载进度,连接就不会有时间进行。