使用WCF和System.AddIn的应用程序体系结构

使用WCF和System.AddIn的应用程序体系结构,wcf,architecture,add-in,Wcf,Architecture,Add In,一点背景-我们正在设计一个使用客户机/服务器体系结构的应用程序,该体系结构包括: 加载服务器端模块的服务器,可能由其他团队开发。 加载相应的客户端模块的客户端也可能由其他团队开发;每个客户机模块对应一个服务器模块。 客户端与服务器端进行通信,以进行一般协调以及模块特定任务。在这一点上,我认为这意味着客户机与服务器对话,客户机模块与服务器模块对话。 环境是.NET3.5,客户端是WPF。 部署场景引入了独立升级服务器、任何服务器端模块、客户端和任何客户端模块的可能性。但是,需要能够使用不匹配的版本

一点背景-我们正在设计一个使用客户机/服务器体系结构的应用程序,该体系结构包括:

加载服务器端模块的服务器,可能由其他团队开发。 加载相应的客户端模块的客户端也可能由其他团队开发;每个客户机模块对应一个服务器模块。 客户端与服务器端进行通信,以进行一般协调以及模块特定任务。在这一点上,我认为这意味着客户机与服务器对话,客户机模块与服务器模块对话。 环境是.NET3.5,客户端是WPF。 部署场景引入了独立升级服务器、任何服务器端模块、客户端和任何客户端模块的可能性。但是,需要能够使用不匹配的版本工作。因此,我关心版本控制问题

到目前为止,我的想法是:

服务器的Windows服务。 在服务器和服务器模块之间的版本兼容性方面,使用System.AddIn使服务器加载服务器模块并与服务器模块通信将为我们提供最大的灵活性。 服务器和每个服务器模块提供WCF服务,用于与客户端通信;服务器与服务器模块之间或两个服务器模块之间的通信使用加载项协定。这样做的一个优点是,模块可以在服务器内外公开不同的接口。 类似地,客户机使用System.AddIn查找、加载客户机模块并与之通信。 通过AddIn接口与客户端模块进行客户端通信;从客户端和从客户端模块到服务器端的通信是通过WCF进行的。 为了获得最大的弹性,每个模块将在单独的应用程序域中运行。 一般来说,系统的性能要求不高,因此编组和跨越过程边界预计不会成为性能问题。性能需求基本上概括为:不要妨碍此处未描述的系统的其他部分。 我的问题是关于使用两种不同的通信和版本控制模型的想法,这将增加开发人员的负担。AddIn看起来相当强大,但也有点笨拙。我也不确定微软将来是否会致力于此。另一方面,我对WCF的版本控制功能并不感兴趣。我觉得可以在WCF中实现System.AddIn view/adapter/contract系统,但由于对这两种技术都比较陌生,我不知道从哪里开始

所以。。。我走对了吗?我这样做很难吗?在这条路上有什么我需要注意的地方吗


谢谢。

这听起来太复杂了。考虑一个体系结构,其中每一个添加的模块既包括客户端代码使用Soop.Advin,如果您喜欢,但其中服务器端模块是一个新的Service .SVC文件。客户端将知道相应服务的URL


或者,您应该查看Microsoft可扩展性框架MEF中的外接程序功能。这就是他们在即将发布的Visual Studio扩展中开始使用的内容。

主机端是一个自定义Windows服务,没有Service.svc文件。但是,客户端加载项可以知道匹配的服务器加载项的URI。MEF简化了许多事情,包括两个服务器外接程序之间的通信方式。但是System.AddIn有更好的版本控制和隔离支持。有什么解决方案吗??