异步WCF和协议行为

时间:2015-09-29 20:00:49

标签: wcf http asynchronous async-await

仅供参考:这将是我第一次真正涉足Async / Await;很长时间以来,我一直在为熟悉的BackgroundWorker领域做好准备。是时候继续前进了。

我希望构建一个WCF服务,在同一局域网中的远程计算机上运行的Windows服务中自托管,这样做:

  1. 接受单个.ZIP存档的请求
  2. 创建存档并打包多个文件
  3. 返回存档作为对请求的响应
  4. 我必须支持大到10GB的档案。毋庸置疑,这种情况并未被基本的WCF设计所涵盖;我们必须采取额外措施来满足要求。我们必须在存档构建时消除超时,并在发送时记忆错误。这两种情况都发生在基本的WCF设计下,具体取决于返回文件的大小。

    我的计划是继续使用task-based asynchronous WCF callsstreaming mode

    我有两个问题:

    1. 这是解决问题的正确方法吗?
    2. 微软在抽象所有这些方面做得很好,但底层协议是什么?引擎盖下发生了什么?'服务器是否在存档构建期间保持连接活动(可能是几分钟),或者在操作完成后关闭连接并启动新连接,从而要求我通过客户端计算机防火墙正确路由请求?
    3. 对于#2,显然我希望前者(保持活着)。但经过一番搜索,我不容易找到答案。也许你知道。

1 个答案:

答案 0 :(得分:2)

您需要为大型有效负载进行流式传输。这是正确的方法。这与异步IO没有任何关系。这两个是独立的。 The client cannot even tell that the server is async internally.

我将添加关于是否使用异步IO的标准答案:

  1. https://stackoverflow.com/a/25087273/122718为什么EF 6教程使用异步调用?
  2. https://stackoverflow.com/a/12796711/122718我们应该切换到默认使用异步I / O吗?
  3. 每个请求都在一个保持活动状态的连接上运行。这既适用于流式传输大量数据,也适用于大量初始延迟。不确定为什么你担心路由。你的路由器是否会终止此类连接那是个问题。

    关于保持活力,没有什么可以通过电线来做到这一点。 TCP会话可以无限期保持开放,没有任何线路流量。

相关问题