Имеют ли значение тайм-ауты WCF для привязок на стороне сервера? - PullRequest
0 голосов
/ 13 июня 2019

Я размещаю службу WCF в IIS и имею следующую привязку в web.config:

    <bindings>
      <wsHttpBinding>
        <binding name="transactionalBinding" 
                 transactionFlow = "true" 
                 sendTimeout     = "00:00:01" 
                 receiveTimeout  = "00:00:01" 
                 openTimeout     = "00:00:01" 
                 closeTimeout    = "00:00:01">
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>

В моем методе обслуживания я сплю 10 секунд. Я не получаю исключение тайм-аута при вызове моего метода обслуживания от клиента.

Есть ли смысл определять тайм-ауты в привязках на стороне сервера?

1 Ответ

1 голос
/ 13 июня 2019

Я не получаю исключение тайм-аута при вызове моего метода обслуживания из клиента.


TL; DR: , поскольку по умолчанию тайм-ауты WCF одна минута , поэтому, естественно, что работа сервера, которая занимает всего 10 секунд, не будет зависеть от времени ожидания.Тайм-ауты, которые вы указали на сервере, будут влиять только на передачу, а не на выполнение вашего метода.(вы больше ничего не звоните)


Вы указываете таймауты в конфигурации server . необходимо *1016* указать тайм-ауты в файле конфигурации клиента, в частности SendTimeout .По сути, независимо от того, что делает вызов, необходимо указать время ожидания операции.Возможно, это не относится к вашему случаю, но если ваш «сервер», в свою очередь, сделал еще один вызов WCF для другой службы, вам также понадобится ваш собственный тайм-аут.

MSDN:

SendTimeout - используется для инициализации OperationTimeout, который управляет всем процессом отправки сообщения, включая получение ответного сообщения для операции службы запроса / ответа.Этот тайм-аут также применяется при отправке ответных сообщений методом контракта обратного вызова.

Обычно конфигурации клиента и сервера WCF должны совпадать, и если вы не используете Добавить ссылку на службу / Обновить ссылку на службу каждый раз, когда сервер сжимается и / или изменяется конфигурация, клиент не узнает об этом.Кстати, избегайте последнего, потому что он дублирует вашу модель и может привести к ошибкам во время выполнения, если они не синхронизированы.Не говоря уже о контрактах на обслуживание, которые могут быть не синхронизированы.

Мимолетная мысль

И это поднимает одну из проблем конфигурации WCF через файлы конфигурации, они подвержены ошибкам во время выполнения, которые невозможно найти.во время компиляции.

Лучше всего полностью отказаться от конфигурационных файлов и выполнить программную настройку с помощью общей сборки, которую используют и ваш клиент, и сервер.Укажите привязки в коде вместе с вашими тайм-аутами.

Таким образом, и сервер, и клиент всегда синхронизируются в отношении конфигурации WCF.

Поскольку согласование тайм-аутов и клиента, и сервера решило бы некоторые проблемы.

Расскажите подробнее

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