我目前正在开发服务,其中客户端通过发送带有消息的 xml 文件与服务器进行通信。为了提高消息传递的可靠性(客户端将使用低质量的有限带宽切换移动互联网),我将这些消息分成 64 或 128 Kb 大小的较小部分,并在 BasicHttp 绑定中使用 transfer="streamed" 发送它们。
现在,我有一个问题:服务器应该向客户端报告,如果他成功接收到一个块,那么在 fe 5 个块传输失败后,传输过程将被取消并推迟到稍后尝试,并跟踪哪个收到了块,哪些没有。
我正在考虑使用回调机制与客户端通信,因此服务器将调用回调方法 ChunkReceived 在它的 [OperationContract] 中,当它将块保存到服务器端的文件中,但是,如果我错了,请纠正我,但是回调仅适用于 WS Dual http 绑定,在 basichttp 绑定中不受支持。但 WS Dual 绑定不支持流式传输。
那么我可以切换到 WS Dual 绑定并使用 transfer="buffered" (考虑到块大小相对较小) - 这不会损害传输的可靠性吗?或者也许我可以通过基本的http绑定以某种方式与客户端通信,也许通过返回某种响应消息,即
[OperationContract]
ServerResponse SendChunk (Chunk chunk);
ServerResponse 将保存一些枚举或布尔标志来告诉客户端 SendChunk 操作是否正常。但是我将不得不在客户端和服务器端都保留某种数组来跟踪所有块的状态。我只是不确定在那里使用的最佳模式是什么。任何建议将不胜感激。