状況が変化したときに、サービス外のすべてのスマートフォンにデータを送信するために、Duplex 通信を行うことができます。
http://www.codeproject.com/Articles/491844/A-Beginners-Guide-to-Duplex-WCF
http://msdn.microsoft.com/en-us/library/ms731064.aspx
ただし、現在の実装を考慮して現在の質問に答えるには、サービスをポーリングして、開始時またはタイマーですべてのメッセージのリストを取得できます
サーバーでは、単純なコレクションに次のようなものを含めることができます。
[ServiceContract(Namespace = "Contracts.IDatabaseResponder")]
public interface IDatabaseResponder
{
//You could use an object rather than a string but then you have to mark the object
[OperationContract]
List<String> GetMessages();
[OperationContract]
void SyncMessagesBack(List<String> messages);
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class DatabaseResponder : IDatabaseResponder
{
List<String> _DatabaseMessageList;
public List<String> GetMessages()
{
//Code here to go to SQL and grab all of the needed Messages
//..
return _DatabaseMessageList;
}
public void SyncMessagesBack(List<String> messages)
{
//Code here to go to SQL and update messages you want to update
//..
}
}
次に、クライアント側では、次のようなものが機能します。
//Can use plain old list or ObservableCollection
private IList<String> _DatabaseMessagesItems = new ObservableCollection<String>();
private DatabaseResponderClient _Proxy;
DispatcherTimer dispatcherTimer;
List<String> LocalListOfMessages;
public Constructor()
{
_Proxy = new DatabaseResponderClient();
_Proxy.InnerChannel.Faulted += new EventHandler(InnerChannel_Faulted);
try
{
_DatabaseMessagesItems = _Proxy.GetMessages();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
throw;
}
dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimerTick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 60);
dispatcherTimer.Start();
dispatcherTimerTick();
}
private void dispatcherTimerTick(object sender, EventArgs e)
{
try
{
//Push back to the service any new or changed list of messages you need to push
_Proxy.SyncMessagesBack(LocalListOfMessages);
}
catch (Exception ex)
{
//Handel error
}
}
//Code to keep track of new messages add them etc
//...