【问题标题】:WCF service clear bufferWCF 服务清除缓冲区
【发布时间】:2012-05-07 18:23:21
【问题描述】:

我目前正在开发 WCF 服务并遇到一个小问题。该服务是轮询双工服务。我通过发送到服务器的消息启动数据传输。然后服务器通过回调通道将大数据包相当快地发送回客户端。

要停止,我向服务器发送一条消息,告诉它停止。然后它通过回调通道发送一条消息,确认这一点,让客户端知道。

问题是一堆数据包被缓冲起来通过回调通道发送到客户端。这会导致等待确认返回的时间很长,因为它必须等待所有数据首先通过。

有什么方法可以清除服务器端回调通道的缓冲区?我不用担心丢失数据,只需将其丢弃并立即发送确认消息即可。

【问题讨论】:

  • 我还没有想出一个好的解决方案。我什至不确定所有数据都在哪里缓冲。服务器正在发送数据,然后我告诉它停止,我看到服务器端发生了这种情况,但客户端在那之后继续获取数据几秒钟。如果我放慢发送速度,我没有问题。但这里的问题是连接速度会有所不同,我觉得这需要根据连接进行限制。即使我可以判断缓冲区何时为空也会有所帮助,然后我可以存储自己发送的数据。

标签: wcf service buffer pollingduplexhttpbinding


【解决方案1】:

我不确定这是否能引导你进入正确的方向......我有一个类似的服务,当我查看我的 Subscribe() 方法时,我可以访问这个:

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

现在,如果您有一种使用 IClient 对象的方法,并且可以访问从中获取 IClient 实例的上下文(解析它的上下文),那么运行以下两个语句是否可以满足您的要求?

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

只是从我的想法中快速漫步。很想知道这是否会解决它,如果没有其他信息,请提供个人信息。您能否将 OperationContext 缓存为包含 2 个属性的 SubscriptionObject 的一部分,第一个是 OperationContext,第二个是您的 IClient 对象。

【讨论】:

  • 这似乎是正确的方向。我保留了客户端和 OperationContext,但是当我去清除 OutgoingMessageHeaders 时,它说在清除之前计数为 0。如果我发现了什么,我会再搞砸一些,让你知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 2012-10-12
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 2020-05-16
相关资源
最近更新 更多