更新を受け取るには、HTTPクライアントは手動でポーリングする必要があります。HTTPには、サーバがHTTPクライアントにイベントや変更を通知するプッシュメソッドがありません。ポーリング時の余計なトラフィックを減少させるために、ODataでは、変更または追加された項目だけを返す$deltatokenパラメータが用意されています。

VariableValueGroupsの場合、$deltatokenは、前回の要求以降に変更されていない変数値はスキップし、更新された変数値を提供します。

このプロセスは、以下のように動作します。

まず、HTTPクライアントは、グループのVariableValuesプロパティを読み取ります。

GET http://my_server:3580/nivariable/VariableValueGroups('1587dcd4a87d118ae3ddd0fce09246f6')/VariableValues?$format=json

HTTPクライアントは、最初のデータセットを受け取ります。デルタ変更を要求するために、HTTPクライアントは、_deltaプロパティで与えられる以下のURIを、VariableValue読み取りのタイムスタンプを$deltatokenに設定して使用します。.

GET http://my_server:3580/nivariable/VariableValueGroups('1587dcd4a87d118ae3ddd0fce09246f6')/VariableValues?$format=json&$deltatoken=1305692428170

前回のGET以降、変更がない場合、結果は空になります。再度、変更を受け取るには、前回の応答で指定されているデルタURIに従います。

GET http://my_server:3580/nivariable/VariableValueGroups('1587dcd4a87d118ae3ddd0fce09246f6')/VariableValues?$format=json&$deltatoken=1305692428170

メモ 変更されていないデルタ値を要求しても、HTTPクライアントでエラーは発生しません。

外部I/Oまたはその他のシェア変数にバインドされた変数を一定間隔でポーリングする

シェア変数が外部I/Oまたは別のシェア変数にバインドされている場合、値更新は、デルタトークンよりも古いタイムスタンプで来る場合があります。たとえば、デルタ変更を時刻t に要求し、新しい値変更がt +1にタイムスタンプt -1で到着します。次回、別のデルタ変更を受け取るとき、サーバはt -1タイムスタンプを新しい値とはみなしません。この問題を避けるために、変数値をポーリングするときは$deltaリングを使用せずに一定間隔で行います。