WCF предотвращает NetNamedPipeBinding Timeout - PullRequest
0 голосов
/ 01 июня 2018

Я создал простую настройку клиентского сервиса для загрузки приложений с сервера.Клиент создает 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();
    }

Затем служба использует Обратный вызов на том же канале, чтобы сообщить клиенту о ходе выполнения.Этот обратный вызов определен как часть 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 минута по умолчанию для привязки.Я мог бы увеличить время ожидания этой привязки, но я обеспокоен тем, что это не идеальное решение, поскольку это плохая практика из-за возможных проблем безопасности / производительности.

Существует ли способ настройки привязки на стороне клиентатак, чтобы период ожидания обновлялся при каждом успешном обратном вызове (keep-alive), так что, пока сервер передает прогресс инкрементной загрузки, соединение не будет задерживаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...