使用PRISM和WCF的WPF - 如何实现连接到WCF服务的多个视图?

时间:2012-07-17 10:09:47

标签: wpf wcf mvvm prism

我正在使用PRISM在MVVM架构中实现WPF客户端应用程序(我是PRISM的新手)。

WPF应用程序有3个主要区域:

  • 左区域
  • 右区域
  • Side Region

左侧区域有一个带有“获取按钮”的视图,按下该视图时应连接到“FETCH”WCF服务,获取项目,断开与服务的连接并在视图中显示项目。

右侧区域有一个没有按钮的视图。此视图应每隔10分钟连接到“POLL”WCF服务,获取项目,断开与服务的连接并在视图中显示项目。

侧面区域有一个没有按钮的视图。此视图应连接到“NOTIFICATIONS”WCF服务,并在整个应用程序生命周期内保持与其连接。它应该从服务接收回调,应该在侧视图中显示。

这是image,显示它应该是什么样子:

image http://s11.postimage.org/xfjheqc0h/SO_Question_4.png

问题:

  1. 我应该将什么传递给包含'Fetch View'的'FETCH MODULE'的构造函数?应该是服务本身还是应该是一些渠道工厂?我认为应该是某种渠道工厂,因为每次用户按下“获取”按钮时都需要启动与“获取WCF服务”的连接。

  2. 同样的问题是'POLL MODULE'。

  3. 关于“通知模块” - 我应该通过“通知服务客户端”的单例实例吗? (因为应用程序只需要向服务打开一个客户端,并且它应该始终保持连接)

  4. 为了避免由于超时而导致的“通知”客户端故障,我需要实现某种“心跳”,它将在“通知”WCF服务上调用存根方法,以便它不会t超时。我应该在哪里放置心跳代码?它应该在“通知模块”中吗?谁应该发起呢? (我相信它应该在某种背景线程中运行)

  5. 我目前正在使用MEF,我真的不知道我在做什么(我用[导出]和[ViewModel] setter用[Import]等装饰了视图,但我仍然没有了解我如何控制谁加载以及何时加载)。另外 - 我不明白依赖注入如何在MEF中工作。使用'MEF Bootstrapper'和'Unity Bootstrapper'之间有什么区别?

  6. 我见过有些人使用MEF,只使用[Import]和[Export]属性,有些人从'IModule'继承他们的模块,并用EventAggreagator,Container和RegionManager实现'InitializeModule'。这些方法之间有什么区别,何时应该使用每种方法?

  7. 您是否建议使用“添加服务参考...”或手动创建“IChannelFactory”? (PROs \ CONs)

  8. 服务客户应该是模块的一部分还是基础架构的一部分?

  9. 我在互联网上搜索了很多WPF + PRISM + WCF的样本,找不到我可以使用的任何好样本,所以我可以理解如何将服务注入到我的视图模型中。任何人都可以提供任何示例\示例链接吗?

  10. 以下4个问题是严格的Cookie:

    1. 我提到的所有3个WCF服务都使用相同的“用户名+密码”身份验证方法,这意味着我需要在加载应用程序时弹出“登录”窗口。在PRISM和MVVM中执行此类操作的最佳实践是什么? “登录”窗口是否应该替换“Shell”窗口? (我不这么认为,那应该是什么?)

    2. 当用户输入用户名+密码时 - 我是否应该尝试仅连接第一个服务,如果成功 - 断开连接并关闭“登录”视图(意思是,我认为连接将是与其他服务一起成功。)

    3. 我可以在哪里存储用户输入的用户名+密码,以便应用程序可以继续重新连接到服务,而无需每次都要求用户提供凭据?

    4. 如果由于某种原因,其中一个模块尝试连接到其中一个WCF服务,并且由于凭据而无法成功,那么您建议采用的方法是什么?我是否应该举起一个强制所有其他模块与其服务断开连接的事件,然后弹出“登录”视图?

    5. 很抱歉很长的帖子......

0 个答案:

没有答案