Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PRISM和WCF的WPF-如何实现连接到WCF服务的多个视图?_Wpf_Wcf_Mvvm_Prism - Fatal编程技术网

使用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服务,但由于凭据原因未能成功,您建议我采取什么方法?我是否应该引发一个事件,强制所有其他模块从其服务断开连接,然后弹出“登录”视图

  • 很抱歉发了这么长的帖子……