我的MS SQL數據庫有一個表。 (2008 R2) 表名:消息 字段:MESSAGE_ID,消息,is_synced通過WCF服務同步SQL表
在我的移動智能手機我需要開發應用程序,將同步我的表中的記錄 和更新表時,應用程序同步的每個記錄。 我需要支持呼叫到WCF的MIN號碼,所以我不能爲每條記錄生成呼叫。
如果表中有n條記錄,我不打給WCF n次,我想一次調用 ,得到所有記錄,同步並返回使用WCF的所有同步結果。 這是正確的路嗎? 你能提出更好的實施嗎?
我的MS SQL數據庫有一個表。 (2008 R2) 表名:消息 字段:MESSAGE_ID,消息,is_synced通過WCF服務同步SQL表
在我的移動智能手機我需要開發應用程序,將同步我的表中的記錄 和更新表時,應用程序同步的每個記錄。 我需要支持呼叫到WCF的MIN號碼,所以我不能爲每條記錄生成呼叫。
如果表中有n條記錄,我不打給WCF n次,我想一次調用 ,得到所有記錄,同步並返回使用WCF的所有同步結果。 這是正確的路嗎? 你能提出更好的實施嗎?
當事情發生變化時,您可以通過雙工通信將數據發送到服務中的所有智能手機。
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
//...
sql2008 db上的表是動態的,意味着它每隔幾秒就會獲取新的記錄。在asp.net網站aspx頁面我需要打印「確切」的結果,尚未同步。而在手機上,我需要同步多個結果並始終向sql2008表報告哪些記錄已同步。所以在這種情況下,計時是每一件事情 - 我不能允許在手機上已經同步的記錄打印爲未在網站上同步的情況。我從來沒有使用雙面打印 - 在我的情況下,準確使用雙面打印? – Kristina88
是雙工應該工作。雙http綁定是你將需要的。用這種類型的WCF服務實現來看看Web上的例子。 –
我的客戶端 - 智能手機應用程序將用於Android。 http://stackoverflow.com/questions/17607237/android-ios-client-consumes-wcf-duplex-service。我看到有沒有支持雙工wcf有 – Kristina88
*** *** SQL只是*結構化查詢語言* - **由很多數據庫系統**使用的查詢語言,但不是數據庫產品本身。我們真的需要知道你正在使用哪個**具體數據庫系統**(以及哪個版本)(請相應地更新標籤)。 –
目前還不清楚你在這裏問什麼。 「這是否是正確的方式」 - 呃,目前還不清楚你正在做什麼或者你爲什麼這麼做。 –