2012-05-07 101 views
2

我目前正在使用WCF服務,並有一個小問題。該服務是一項輪詢雙面打印服務。我通過發送到服務器的消息啓動數據傳輸。然後服務器很快通過回調通道將大數據包發送回客戶端。WCF服務清除緩衝區

要停止我發送一條消息給服務器,告訴它停止。然後它會通過回覆通道發送一條消息來確認這一點,讓客戶知道。

問題是,一堆數據包被緩存起來,通過回調通道發送到客戶端。這會導致等待確認回覆,因爲必須先等待所有數據通過。

有沒有什麼辦法可以清除服務器端回調通道的緩衝區?我不需要擔心丟失數據,我只需要扔掉它並立即發送確認消息。

+0

我還沒有想出一個很好的解決方案。我真的不知道所有數據在哪裏緩衝。服務器正在發送數據,然後我告訴它停止,我發現這發生在服務器端,但客戶端在此之後繼續獲取數據。如果我放慢發送速度,我沒有問題。這裏的問題雖然是連接速度會有所不同,我覺得這將需要基於連接進行節流。即使我可以知道緩衝區何時會有所幫助,那麼我可以將自己發送的數據存儲起來。 – thecaptain0220

回答

1

我不知道這是否可以帶領你進入正確的方向或不...我有一個類似的服務在那裏,當我看着我的訂閱()方法,我可以訪問此:

var context = OperationContext.Current; 
var sessionId = context.SessionId; 
var currentClient = context.GetCallbackChannel<IClient>(); 
context.OutgoingMessageHeaders.Clear(); 
context.OutgoingMessageProperties.Clear(); 

現在,如果您有一種使用IClient對象的方式,並且從IClient實例中獲取IClient實例的上下文(可以解析它的上下文),那麼可以運行以下兩個語句來執行您想要的操作嗎?

context.OutgoingMessageHeaders.Clear(); 
context.OutgoingMessageProperties.Clear(); 

只是從我的想法快速漫步。想知道這是否會解決它,如果沒有其他的東西,就會知道個人信息。你能緩存OperationContext作爲一個SubscriptionObject的一部分,它包含兩個屬性,第一個是OperationContext,第二個是你的IClient對象。

+0

這似乎可能是正確的方向。我保持客戶端和OperationContext,但當我去清除OutgoingMessageHeaders它說計數清零之前。如果我找到任何東西,我會更多地瞭解它並讓你知道。 – thecaptain0220