-1

由于我的介绍不好使人们感到困惑,因此我正在编辑问题并删除我之前所做的介绍。

现在,这是我现在担心的商业案例。C#伪代码:

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

我很困惑,因为存在可靠的 WSBinding,而 basicHTTPBinding 不可靠。我知道具有可靠会话的 WSBinding 可以保证交付、订单、内容被加密等。但是在我用伪代码描述的情况下,根据我的观点,即使使用 basicHttpBinding 和基于 TCP 的 HTTPS,我也支持所有这些。TCP 为我提供了可靠性、顺序保证和 HTTPS 加密。

  1. (1.被删除)我与以前的关系正确吗?或者换种说法:有没有例子表明在指定条件下basicHttpBindind 不能提供与具有可靠会话的WS 绑定相同的功能?

  2. 我的业务案例需要按发出的顺序接受 WCF 调用。如果我在 foreach 循环中从客户端同步发送它们(如伪代码所示),我假设无论是否在一个 TCP 连接中发送它们,服务器的顺序都得到保证,因为我正在等待响应,然后我发送另一个请求。由于没有并行化,即使负载均衡器也不能在这里乱序消息,消息是同步发送的。我认为只有当我发送消息而不等待响应以火而忘记的方式并且我使用不同的 TCP 连接时才会发生混乱。那么,我在这里吗?:)

4

1 回答 1

0

可靠性一词有不同的含义,解释也取决于上下文。您对问题可靠性的解释是消息已传递。您引用的来源中对可靠性的解释是消息只传递一次。您的困惑来自于“HTTP 不可靠”这句话是为了对可靠性的一种解释,并在您对可靠性的不同解释中使用它。

HTTP 不能保证消息只传递一次,它最多可以保证消息至少传递一次。在发送请求或接收响应时,底层 TCP 连接可能会中断。在这种情况下,客户端可能会忽略问题或重试,这可能会导致没有消息传递(发送请求时忽略错误),但也会导致多次传递相同的消息(如果响应期间连接中断,则重试)。通过重试直到成功收到响应,可以保证至少收到一次消息,这是您对可靠性的解释,而不是您引用的陈述中的解释。

于 2018-11-15T18:37:19.830 回答