- wpf/
- 使用PRISM和WCF的WPF-如何实现连接到WCF服务的多个视图?
使用PRISM和WCF的WPF-如何实现连接到WCF服务的多个视图?
使用PRISM和WCF的WPF-如何实现连接到WCF服务的多个视图?,wpf,wcf,mvvm,prism,Wpf,Wcf,Mvvm,Prism,我正在使用PRISM在MVVM体系结构中实现一个WPF客户端应用程序(我是PRISM的新手)
WPF应用程序有3个主要区域:
左区
右区
边区
左侧区域有一个带有“Fetch”按钮的视图,按下该按钮时,应连接到“Fetch”WCF服务,提取项目,断开与服务的连接,并在视图中显示项目
右侧区域有一个没有按钮的视图。此视图应每10分钟连接一次“轮询”WCF服务,获取项目,断开与服务的连接,并在视图中显示项目
侧面区域有一个没有按钮的视图。此视图应连接到“通知”WCF服务,并在整个应用程序生命周期
我正在使用PRISM在MVVM体系结构中实现一个WPF客户端应用程序(我是PRISM的新手)
WPF应用程序有3个主要区域:
左侧区域有一个带有“Fetch”按钮的视图,按下该按钮时,应连接到“Fetch”WCF服务,提取项目,断开与服务的连接,并在视图中显示项目
右侧区域有一个没有按钮的视图。此视图应每10分钟连接一次“轮询”WCF服务,获取项目,断开与服务的连接,并在视图中显示项目
侧面区域有一个没有按钮的视图。此视图应连接到“通知”WCF服务,并在整个应用程序生命周期内保持连接。它应该接收来自服务的回调,这些回调应该显示在侧视图中
下面是一个显示其外观的示例:
问题:
我应该向包含“FETCH视图”的“FETCH模块”的构造函数传递什么?应该是服务本身还是某个渠道工厂?我认为这应该是某种渠道工厂,因为每次用户按下“Fetch”按钮时都需要启动与“Fetch WCF服务”的连接
同样的问题也适用于“投票模块”
关于“通知模块”,我应该传递“通知服务客户端”的单例实例吗?(因为应用程序只需要向服务打开一个客户端,并且应该始终保持连接)
为了避免“通知”客户端因超时而出错,我需要实现某种“心跳”,它将调用“通知”WCFservice上的存根方法,以便它不会超时。我应该把心跳的代码放在哪里?它应该在“通知模块”中吗?谁应该发起?(我认为它应该在某种背景线程中运行)
我目前正在使用MEF,但我真的不知道我在做什么(我用[Export]装饰视图,用[Import]装饰[ViewModel]setter,等等,但我仍然不知道如何控制谁和何时加载)。此外,我不明白依赖注入在MEF中是如何工作的。使用“MEF引导程序”和“Unity引导程序”有什么区别
我见过一些人使用MEF,只使用[Import]和[Export]属性,还有一些人从“IModule”继承模块,并使用EventAggreagator、Container和RegionManager实现“InitializeModule”。这些方法之间有什么区别,什么时候应该使用每种方法
您建议使用“添加服务引用…”还是手动创建“IChannelFactory”?(赞成/反对)
服务客户端应该是模块的一部分还是基础架构的一部分
我在互联网上搜索了很多WPF+PRISM+WCF的示例,但没有找到任何可以使用的好示例,因此我能够理解如何将服务注入到我的视图模型中。有人能提供任何示例\示例链接吗
以下4个问题是一个棘手的问题:
我提到的所有3个WCF服务都使用相同的“用户名+密码”身份验证方法,这意味着当应用程序加载时,我需要弹出一个“登录”窗口。在PRISM和MVVM中执行此类操作的最佳实践是什么?“登录”窗口是否应取代“外壳”窗口?(我不这么认为,那应该是什么?)
当用户输入用户名+密码时-我是否应该尝试仅连接到第一个服务,如果成功-断开与它的连接并关闭“登录”视图(这意味着,我假设与其他服务的连接将成功)
在哪里可以存储用户输入的用户名+密码,以便应用程序可以继续重新连接到服务,而无需每次请求用户提供凭据
如果出于某种原因,其中一个模块试图连接到某个WCF服务,但由于凭据原因未能成功,您建议我采取什么方法?我是否应该引发一个事件,强制所有其他模块从其服务断开连接,然后弹出“登录”视图
很抱歉发了这么长的帖子……