2013-08-23 94 views
0

我的MS SQL數據庫有一個表。 (2008 R2) 表名:消息 字段:MESSAGE_ID,消息,is_synced通過WCF服務同步SQL表

在我的移動智能手機我需要開發應用程序,將同步我的表中的記錄 和更新表時,應用程序同步的每個記錄。 我需要支持呼叫到WCF的MIN號碼,所以我不能爲每條記錄生成呼叫。

如果表中有n條記錄,我不打給WCF n次,我想一次調用 ,得到所有記錄,同步並返回使用WCF的所有同步結果。 這是正確的路嗎? 你能提出更好的實施嗎?

+0

*** *** SQL只是*結構化查詢語言* - **由很多數據庫系統**使用的查詢語言,但不是數據庫產品本身。我們真的需要知道你正在使用哪個**具體數據庫系統**(以及哪個版本)(請相應地更新標籤)。 –

+0

目前還不清楚你在這裏問什麼。 「這是否是正確的方式」 - 呃,目前還不清楚你正在做什麼或者你爲什麼這麼做。 –

回答

1

當事情發生變化時,您可以通過雙工通信將數據發送到服務中的所有智能手機。

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 
    //... 
+0

sql2008 db上的表是動態的,意味着它每隔幾秒就會獲取新的記錄。在asp.net網站aspx頁面我需要打印「確切」的結果,尚未同步。而在手機上,我需要同步多個結果並始終向sql2008表報告哪些記錄已同步。所以在這種情況下,計時是每一件事情 - 我不能允許在手機上已經同步的記錄打印爲未在網站上同步的情況。我從來沒有使用雙面打印 - 在我的情況下,準確使用雙面打印? – Kristina88

+0

是雙工應該工作。雙http綁定是你將需要的。用這種類型的WCF服務實現來看看Web上的例子。 –

+0

我的客戶端 - 智能手機應用程序將用於Android。 http://stackoverflow.com/questions/17607237/android-ios-client-consumes-wcf-duplex-service。我看到有沒有支持雙工wcf有 – Kristina88