1

我有一个带有“登录”窗口的 WPF 应用程序,用户需要在其中指定用户名和密码。然后,WPF 应用程序需要使用这些凭据连接到 WCF 服务,并在其生命周期内保持与服务的连接,因为它通过 ICallback 接口从服务接收回调通知。

这是想法(链接到更大的图像):

这是这样的想法:

问题:

  1. 凭据(用户名和密码)信息是否应该通过 Login ViewModel 提供给静态服务工厂?

  2. 一旦服务客户端设法连接到 WCF 服务 - 登录窗口应关闭,主窗口应显示。主窗口现在如何知道登录窗口创建的服务客户端?一旦从服务到达,MainWindow 将如何显示通知?

  3. 登录窗口是否应该将服务客户端传递给 MainWindow ?这对我来说似乎是糟糕的编码......

  4. 假设 WCF 服务由于某种原因出现故障。我希望 MainWindow 能够显示它(可能使用红色 LED 图像)。断开连接的信息如何从服务工厂传递到主窗口的视图?视图应该与客户端中的事件挂钩吗?

  5. 如果 WCF 服务断开连接(可能因维护而停机),将如何继续执行与 WCF 服务的“自动重新连接”?

任何能回答任何问题的人都会对我有很大帮助......

4

2 回答 2

1
  1. 将登录服务抽象为 ILoginService 接口(更易于模拟)。以您认为最好的方式实施部署代码(例如服务工厂)。LoginService 将实现登录功能(例如身份验证)。

  2. 您使用的是哪个 MVVM 工具包?(我建议尝试 MVVM Light。)

  3. 是的。登录只是一个子弹出/对话框。您可以在共享的 LoginService 中尝试 MEFing,或者假设 MVVM Light,您可以使用 Messenger。

  4. MainViewModel 应该按照 Mikey 的建议进行心跳。出现错误时,设置 INotifyPropertyChanged (INPC) 属性(MainWindow 绑定到该属性)。

  5. 这似乎是个人喜好。它应该尝试在 5 秒、30 秒、2 分钟、5 分钟、1 小时内重新连接吗?我不知道; 随心所欲地去做。尝试一些不同的东西。我认为使用相同的线程重新连接不会有什么害处。

于 2012-07-11T04:57:07.520 回答
1

创建一个新的 WCF API 调用,它是一个“心跳”。客户端必须每 5 分钟左右调用一次此调用,如果不是,则客户端已断开连接。

强制客户端发送断开连接消息是有问题的。请记住,由于硬件问题(例如连接丢失或其他故障),客户端计算机可能随时崩溃。

于 2012-07-10T23:22:51.747 回答