我有一个带有 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 的方法?