2011-04-21 60 views
0

我们正在就使用WCF和创建服务和客户端支持进行一些讨论。WCF中不可互操作的服务的优点?

目前我们通过提供silverlight版本的服务库客户端来支持silverlight客户端,这样我们就可以保持使用接口定义的服务契约的强类型。

这没问题,但是使用接口定义的服务使得其他客户端很难使用,因为WSDL有很多方法返回ArrayOfAnyType,并且一切都只是客户端的对象(可以将其转换为正确的类型,但正如我所说,它的尴尬)。

我们可以重写我们的服务,使用显式的DTO进行消息传输,并使用类似的客户端库来重新创建我们的业务对象,这将使我们的服务更加互操作。

虽然这样做似乎阻止了我们的一些选择,例如使用EntityFramework和它提供的自我跟踪实体,因为这些需要在客户端和服务器上共享相同的库,并且不可互操作(如果我这是错误的)

似乎在互操作和开箱即用的更多功能之间存在权衡,允许更快地开发解决方案。

所以我的问题是,我们通过决定不可互操作并只支持.net和silverlight客户端(如果支持silverlight客户端可以被认为是不可互操作的),我们获得了哪些优势?有什么有用的.net功能可以阻止我们决定互操作吗?

是否存在允许这两种类型的解决方案共存的标准技术,因此您可以使用可用的全部功能支持.net客户端,但是仍然支持其他非.NET客户端?

回答

0

您可以使用此门面模式。

将您当前的逻辑移到业务层,不要通过WCF公开它。

现在为您希望支持的每个合同创建一个WCF服务。此图层将业务层对象映射到业务层中的合同对象和调用功能。

然后,您可以为每个客户端提供所有逻辑和自定义服务的中心位置。