2

我有一个带有 oneway = true、netTCPBinding 的回调 api。我观察到客户端上的服务调用回调是数据以乱序方式到达!

服务:

[OperationContract(IsOneWay = true)]
SendData(DateTime time, double[] data)

void SendData()
{
    while(data = GetNextData() != null)
    {
         SendData(DateTime.Now, data); 
    }
}

客户端:[CallbackBehavior(UseSynchronizationContext = false)]

public class Data
{
    public DateTime time;
    public double[] data;
}

ConcurrentQueue<double[]> queue;
SendData(DateTime time, double[] data)
{
    queue.Enque(new Data (time, data));
}

我在另一个线程中使用队列,我观察到的是“时间”,它告诉我在调用 sendData(..) 时队列中的数据顺序不正确时的服务时间![SendData(..) in service 在循环和单线程中调用,这确保时间总是在增加..

1)为什么我在 TCP 提供数据包的有序传递时出现乱序传递数据。是我的代码中的问题还是我需要 WCF - 可靠会话?

2) 在已经提供订单交付的 TCP 的情况下,将 Order 启用的可靠会话设置为 true 的目的是什么。

3) 是否有任何替代可靠会话顺序 = true 的方法?

4

0 回答 0