CSharp - 在块中,WCF: WS双绑定或者basichttp绑定流文件

  显示原文与译文双语对照的内容
0 0

我目前正在开发服务,客户端通过发送带有消息的xml文件与服务器通信。 在messaging或者 128大小的小部分中,为了提高消息传递的可靠性,在BasicHttp绑定中发送了 transfer="流式处理"。

现在,我有一个问题: 服务器应该报告到客户端,如果 f.e 5块无法传输,传输过程将被取消并延迟。

如果在服务器端运行回调方法,则服务器将调用回调方法 ChunkReceived,但在服务器端不支持回调方法,在绑定中不支持 callback 。 但是WS双绑定不支持流传输。

因这里,我可以以使用 switch 双绑定并使用 transfer="缓冲"( 考虑块大小相对较小) - 不会影响传输的可以靠性。 或者者我可以以通过基本的http绑定与客户端进行通信,也许通过返回某种响应消息。

 [OperationContract]
 ServerResponse SendChunk (Chunk chunk);

ServerResponse将保存一些 enum 或者布尔标志,以告诉客户端SendChunk操作是否正确。 但是,我将在客户端和服务器端保留一些 array,以跟踪所有块状态。 我只是不确定什么是最好的Pattern 。 任何建议都会非常感激。

时间:原作者:1个回答

0 0

我们在应用程序中有类似的问题- 低带宽和许多中断/超时。 我们有较小的消息,所以我们没有拆分它们,但是这个解决方案应该能够对块进行。 我们在客户上建立了转发器。 这被证明是可以靠的解决方案- 它对具有缓慢的连接( 就像 GPRS - 经常被移动)的客户机。 另外,如果服务器因负载过高而降低,则客户端将不会得到超时错误。 这里有修改过的版本,

客户:

1. Client sends Chunk#1, with pretty short timeout time
2. Is there OK response:
 2A. Yes - proceed to next chunk
 3. Was that last chunk?
 3A. Yes - process reponse
 3B. No - send next chunk
 2B. No - repeat current chunk

服务器:

  1. 接受请求

  2. 块是否重复

    2A是

    1. 最后的区块:

      3A 。- 检查响应是否就绪,否则等待( 这里propably将使客户端重复)

      3B 。不- 发送确认响应

    2B 。不:

    1. 保存请求( List,字典 等等 )

    2. 这是最后一个区块:

      5A 。是- 处理消息,保存响应并将它的发送给客户端

      5B 。不- 发送确认消息

原作者:
...