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(..) はループとシングルスレッドで呼び出され、時間が常に増加していることを確認します..
1) TCP がパケットの順序付き配信を提供するのに、データの順序どおりの配信が得られないのはなぜですか。私のコードに問題がありますか、それとも WCF - 信頼できるセッションが必要ですか?
2) 注文配信で既に提供されている TCP の場合、信頼できるセッションを有効に設定し、注文を true に設定する目的は何ですか。
3) 信頼できるセッション順序 = true に代わるものはありますか?