2012-07-10 18 views
1

我有一個「登錄」窗口,其中用戶需要指定用戶名和密碼的WPF應用程序。 WPF應用程序需要使用這些憑據連接到WCF服務,並在其生命週期中保持連接到該服務,因爲它通過ICallback接口從服務接收回調通知。如何確保客戶端保持連接到WPV MVVM應用程序中的WCF服務?

這是觀念(link to larger image):

This is the idea: http://s14.postimage.org/r2gbc9uvz/SO_Question_2.png

問題:

  1. 應的憑據(用戶名&密碼)信息,通過登錄視圖模型被輸送到一個靜態服務工廠?

  2. 一旦服務客戶端設法連接到WCF服務 - 登錄窗口應該關閉,並且應該顯示MainWindow。主窗口現在如何知道登錄窗口創建的服務客戶端?一旦從服務到達,MainWindow如何能夠顯示通知?

  3. 登錄窗口應該將服務客戶端傳遞給MainWindow嗎?這似乎對我來說是不好的代碼...

  4. 說WCF服務出於某種原因停機。我希望MainWindow能夠顯示它(可能使用紅色LED圖像)。關於斷開連接的信息如何從服務工廠傳遞到主窗口的視圖?應該將視圖掛鉤到客戶端的事件中?

  5. 如何在斷開連接的情況下繼續執行WCF服務的「自動重新連接」(可能因維護而關閉)?

任何人誰可以回答任何問題,將幫助我很多......

回答

1

創建一個新的WCF API調用是一個「hearbeat」。這個調用必須每隔5分鐘左右由客戶端調用,如果客戶端沒有斷開連接。

強制客戶端發送斷開連接消息是有問題的。請記住,由於硬件問題(如連接丟失或其他故障),客戶機可能隨時崩潰。

+0

我不太明白這是如何幫助我的問題。對不起:\ – 2012-07-11 05:42:15

+0

現在我明白你的意思了......感謝這個想法 – 2012-07-11 05:47:43

1
  1. 將登錄服務抽象爲ILoginService接口(更容易模擬)。但是,如果您認爲最佳,則實施部署代碼(例如服務工廠)。 LoginService將實現登錄功能(例如auth)。

  2. 您正在使用哪個MVVM工具包? (我推薦使用MVVM Light。)

  3. 是的。登錄只是一個小孩彈出/對話框。您可以在共享的LoginService中嘗試MEFing,或者假設使用MVVM Light,則可以使用Messenger。

  4. MainViewModel應該按照Mikey的建議做心跳。當出現錯誤時,設置INotifyPropertyChanged(INPC)屬性(MainWindow綁定到)。

  5. 這似乎是個人偏好。它應該嘗試在5秒內重新連接,然後30秒,然後2分鐘,然後5分鐘,然後1小時?我不知道;然而,只要你覺得就做。嘗試一些不同的東西。我不認爲使用同一個線程重新連接會造成危害。

+0

1.你的意思是什麼'登錄服務'?我沒有'登錄服務'... – 2012-07-11 05:43:02

+0

2.我想過使用'Simple MVVM Toolkit',儘管它使用'Service Locator',我知道它是一種反模式... – 2012-07-11 05:43:50

+0

3.如何'LoginViewModel'會將服務傳遞給'MainWindowViewModel'嗎?這不是不好的編碼嗎? – 2012-07-11 05:44:25

相關問題