Как не надежен WCF с базовым связыванием по TCP?

Так как у меня было плохое введение, которое запутало людей, я редактирую вопрос и удаляю введение, которое я сделал ранее.

Теперь вот экономическое обоснование, по которому у меня сейчас есть опасения. C# псевдокод:

 Array.ForEach(files, filename =>
                    {
                        try
                        {
                           WcfServiceClient wcfClient = new WcfServiceClient();
                           wcfClient.SomeMethodWhichPostsFile(filename);
                        }
                        catch (Exception ex)
                        {
                            LogException(ex)
                        }
                    }
                );

Я смущен из-за существования WSBinding, который является надежным, а basicHTTPBinding - нет. Я знаю, что WSBinding с надежными сеансами гарантирует доставку, порядок, контент в зашифрованном виде и т. Д. Но в случае, который я описал с псевдокодом, по моему мнению, все они поддерживаются даже с basicHttpBinding и HTTPS через TCP. TCP обеспечивает мне надежность, гарантии заказа и шифрование HTTPS.

  1. (1. удален) Правильно ли я связан с предыдущим? Или перефразируя: есть ли пример, чтобы показать, что basicHttpBindind при определенных условиях не может обеспечить те же функции, что и привязка WS с надежными сеансами?

  2. В моем экономическом случае требуется принимать вызовы WCF в порядке их поступления. Если я отправляю их синхронно от клиента в цикле foreach (как показано в псевдокоде), я предполагаю, что порядок на сервере гарантирован, независимо от того, отправляются ли они в пределах одного TCP-соединения или нет, так как я жду ответа, а затем Я отправил еще один запрос. Даже loadbalancer не может разладить сообщения здесь, поскольку нет распараллеливания, сообщения отправляются одно за другим синхронно. Я предполагаю, что беспорядок может произойти, только если я отправляю сообщения, не ожидая ответа в огне и забывая, и я использую различные соединения TCP. Так я здесь?:)

1 ответ

Существуют разные значения термина надежность, и интерпретация также зависит от контекста. Ваша интерпретация надежности в вашем вопросе - сообщение доставлено. Источником достоверности в источнике, который вы цитируете, является то, что сообщение доставляется ровно один раз Ваша путаница возникает из-за утверждения "HTTP не надежен", которое предназначалось для одной интерпретации надежности, и использования его в вашей другой интерпретации надежности.

HTTP не может гарантировать, что сообщение будет доставлено только один раз, он может максимально гарантировать, что сообщение будет доставлено хотя бы один раз. Может случиться, что основное TCP-соединение разрывается при отправке запроса или получении ответа. В этом случае клиент может проигнорировать проблему или повторить попытку, что может привести к тому, что сообщение не будет доставлено (игнорирование ошибок при отправке запроса), но также будет доставлено одно и то же сообщение несколько раз (повторная попытка разрыва соединения во время ответа). Повторяя попытку до тех пор, пока ответ не будет получен успешно, можно гарантировать, что сообщение будет получено хотя бы один раз, что является вашей интерпретацией надежности, а не интерпретацией, указанной в утверждении, которое вы приводите.

Другие вопросы по тегам