使用插件扩展WCF接口

时间:2010-08-08 14:39:04

标签: c# silverlight wcf plugins interface

我正在使用Silverlight前端构建一个应用程序,该前端通过WCF与后端服务进行通信。我的服务有一个接口,可以处理与前端的所有核心通信。

后端可以使用各种插件进行扩展,我计划加载自定义silverlight模块,以便使用棱镜配置这些插件。问题是,这些插件将添加不属于基本WCF接口的其他功能。我想为我的所有通信维护一个端点(即不需要额外的路由器配置)。

我正在寻找有关如何实现此实现的一些想法。我现在的“最佳”想法是在我的核心界面中有一个功能,它接受一个函数名和一个参数列表,并使用反射来查找在特定插件中调用的函数,我不是这个的粉丝出于很多原因。

您对在单个端点上构建可扩展WCF接口有何建议?

由于

1 个答案:

答案 0 :(得分:3)

我可以想到通常会处理两种方式:

  1. XML契约 - 基本上,您的服务只不过是一个带有XML返回值的XML参数。然后,您可以解析或序列化/反序列化在客户端和服务器之间执行的命令。由于您的合同只公开单个XML,因此您在“内部”执行的操作取决于您。您可以执行诸如为新方法传输模式以验证在客户端上构建的调用等操作。

  2. RESTful服务 - 这是另一种简单的方法。由于REST合同是URL,因此添加新扩展名与提供新的URL格式一样简单。您可以通过格式化程序与客户端进行通信,以便如何调用扩展方法的新调用,并在构建应用程序时对其进行管理。

  3. 但实际上,我怀疑你的font-end能够处理所有边缘情况并在扩展服务器端时动态构建新的屏幕和验证。在这种情况下,我认为更好的方法是使用MEF将Silverlight应用程序构建为模块应用程序。当您在服务器上有扩展时,您只需为客户端提供扩展XAP。您可以让服务器在插件的目录中枚举XAP文件并将它们发送到Silverlight应用程序,因此当新的应用程序可用时,它可以动态加载这些文件。 XAP将包含连接到新WCF合同以获得扩展功能的代码。