【问题标题】:Custom processing of CSV file via WCF通过 WCF 自定义处理 CSV 文件
【发布时间】:2010-07-28 16:15:44
【问题描述】:

我有一个项目,其中我有一个 WCF 服务,我基本上希望在将文件拖放到某个目录时调用该服务。我在网上看到了基本的自定义传输通道逻辑,它处理文件传输。但是,还有一点,文件本身的内容。该文件将是一个逗号分隔的数据文件。对于文件中的每一行,我希望在服务上调用一个特定的方法。这是我遇到问题的部分。

我明白其中一部分将涉及自定义 MessageEncoder。这是我的餐巾纸背面设计。编码器将接收数据流(文件)。它将从文件中读取一行并从中创建一条消息(我仍然对那部分一无所知)。然后,Stream 有更多数据要读取这一事实应该告诉文件传输通道从中读取另一条消息。

我在正确的轨道上吗?另一个问题是我的编码器应该如何处理缓冲调用。我按值进入 ArraySegment,所以我唯一能想到的就是修改传入的数组(我不能只操作偏移量,它不会返回给原始调用者)。

想法?我知道这有点啰嗦。

【问题讨论】:

    标签: wcf wcf-binding


    【解决方案1】:

    您无法在 MessageEncoder 中完成所有这些工作,因为 WCF 在该阶段具有很强的单消息输入/单消息输出偏差。基本上,您可能必须将频道和自定义编码器一起工作。

    为了简单起见,我可能会做的是让传输通道本身拾取文件,打开它并一次读取一条记录,然后一次生成(通过编码器)一条消息满足一个 receive() 调用。

    至于如何处理缓冲,这通常是一个拖累,但传递给编码器的这些大小基本上是为了允许您对分配的任何缓冲区的最大大小设置硬限制(这样您就不会'甚至尝试处理太大的消息)。不过,如果您使用流式接口,这并不是真正的问题。

    【讨论】:

    • 是的,我的想法实际上是 MessageEncoder 会接受流,读取足以覆盖一条消息(在本例中为一行),然后传输通道会注意到流尚未完全读取,因此重新调用编码器以获取另一条消息(重复直到完成)。
    • 你也许能做到,但对我来说似乎比需要的复杂一点:)
    猜你喜欢
    • 1970-01-01
    • 2020-05-08
    • 2010-12-28
    • 1970-01-01
    • 2015-02-06
    • 2020-01-02
    • 2021-10-23
    • 2023-01-19
    相关资源
    最近更新 更多