2010-11-03 125 views
3

我是新来的PRISM框架,所以我的问题可能有点偏离主题。WCF/WPF最佳实践 - WCF ChannelFactory和PRISM

我已经建立了由两个项目组成的WCF服务。

  1. WCF .svc和Web.config项目只包含服务定义。
  2. 定义WCF服务接口和服务类型的服务类型项目。

在客户端,我有点担心我应该如何实现一个单一的长期代理服务。

我的方法是使用ChannelFactory<T>为服务创建一个通道,并将其注册到模块中的Unity容器。这意味着我的模块必须引用服务类型项目才能获得服务接口(这是正确的方式?)。

问题是“当我们需要提供身份验证来创建频道以及如何处理断开/重新连接时,管理此频道的最佳方式是什么。”

回答

1

代理不应该是IMO单身人士(或基于统一的单身人士),而应该由需求创建。这样每个逻辑模块可以随意创建它,而不会干扰其他模块。

除了你的方法是非常正确的。代理应该有一个ServiceType项目的引用等

如果你想实现一个认证“服务”,那么我会创建另一个名为AuthenticationService的类,并在Unity中注册为单例。这反过来会得到对新代理的引用,并且将处理与认证/授权有关的所有事情。

这个想法是让每个逻辑模块的行为就好像它是应用程序中唯一的东西,而不需要担心除依赖关系之外的其他模块。所以如果你有两个视图,每个视图都可以获得他们自己的IAuthenticationService,这将是相同的(并且他们不应该关心它),而AuthenticationService本身依赖于代理,并且它会持有对它的引用贯穿其生活。