2010-07-28 36 views
0

我有一個項目,我有一個WCF服務,我基本上只要在某個目錄中刪除一個文件就要調用它。我已經看到了在Web上發佈的基本自定義傳輸通道邏輯,該邏輯處理文件傳輸。但是,還有一點是文件本身的內容。該文件將成爲逗號分隔的數據文件。對於文件中的每一行,我想要在服務上調用特定的方法。這是我遇到的問題。通過WCF自定義處理CSV文件

我明白,這部分將涉及一個自定義MessageEncoder。這是我的餐巾背面設計。編碼器將接收一個數據流(文件)。它會從文件中讀取一行,並從中創建一條消息(這一部分我仍然有點不知所措)。然後,流有更多數據要讀取的事實應該告訴文件傳輸通道從中讀取另一條消息。

我在正確的軌道上嗎?另一個問題是我的編碼器應該如何處理緩衝的呼叫。我得到一個ArraySegment的值,所以我能想到的唯一的事情就是修改傳入的數組(我不能操縱偏移量,它不會回到原來的調用者)。

想法?我知道這有點漫無目的。

回答

0

您無法在MessageEncoder中完成所有工作,因爲WCF在該階段具有強大的單消息/單消息輸出偏好。基本上,你可能不得不把你的頻道和你的自定義編碼器一起工作。

我想可能也保持簡單是傳送信道本身在拿起文件,打開它,並在它從一次讀一個記錄,然後產生(通過編碼器)一個消息時間來滿足一個receive()調用。

至於如何處理緩衝,這通常是一個拖動,但傳遞給編碼器的大小基本上允許你設置任何緩衝區分配的最大大小的硬限制(這樣你就不用甚至不會嘗試處理消息太大)。但是,如果您使用流媒體接口,那不是直接問題。

+0

是的,我的想法實際上是MessageEncoder會接受流,讀取足夠的信息來覆蓋一條消息(在這種情況下,一行),然後傳輸通道會注意到流沒有被完全讀取,所以重新調用編碼器以獲取另一條消息(重複直到完成)。 – Rich 2010-07-28 18:34:51

+0

你也許可以做到這一點,但似乎有點複雜,比我需要:) – tomasr 2010-07-28 19:22:59