Где я должен увеличить свой ReceiveTimeout? - PullRequest
2 голосов
/ 14 июля 2011

У меня двустороннее TCP-соединение между клиентом Silverlight и сервером WCF C #. Сервер постоянно отправляет обновления клиенту. Однако после примерно десяти минут бездействия пользователя любая пользовательская операция, отправляемая на сервер, приводит к исключению, хотя обновления продолжаются успешно.

Учитывая период времени и неактивность на стороне клиента, я предполагаю, что это связано с параметром ReceiveTimeout. Однако когда я пытаюсь установить его на клиенте (см. Ниже), это не исправляется.

        CustomBinding binding = new CustomBinding(new BinaryMessageEncodingBindingElement(),
            new TcpTransportBindingElement());
        binding.ReceiveTimeout = TimeSpan.MaxValue;
        EndpointAddress address = new EndpointAddress(testAddress);

        testClient = new TestClient(binding, address);

Нужно ли устанавливать это на стороне сервера, а также на стороне клиента или вместо нее?

Если мне нужно установить это на сервере, как бы я это сделал, поскольку я использую OperationContext.Current.GetCallbackChannel<ITestClient>() для получения интерфейса обратного вызова?

Интерфейс обратного вызова не дает мне доступа к свойствам для установки тайм-аутов, и я не уверен, к чему его привести, чтобы включить это. Я попытался установить его на ServiceHost на стороне сервера, но, похоже, это тоже не помогло.

Ответы [ 3 ]

1 голос
/ 14 июля 2011

Я бы настроил расширенные OpenTimeout, ReceiveTimeout и SendTimeout как на клиенте, так и на сервере.

0 голосов
/ 14 июля 2011

Оказывается, ответ: это не имеет значения. Установка его на стороне клиента была технически правильной, но согласно Настройка использования веб-службы в клиентах Silverlight :

Внимание: это значение receiveTimeout не соблюдается в Silverlight 4 и его настройка не повлияет на поведение применение.

С тех пор я проверил это и убедился, что это так.

В итоге ответ реализовал вызов поддержки активности на сервер один раз каждые четыре минуты (четыре минуты выбраны, потому что это половина времени ожидания приема, равного десяти минутам, за вычетом буфера).

0 голосов
/ 14 июля 2011

Я думаю, вам следует установить обе стороны.

вы можете попытаться использовать привязку на стороне службы (через ServiceHost.Description) и установить ее ReceiveTimeout.

Я неПонимаете, почему вы не используете netTcpBinding напрямую и не используете web.config или app.config?

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