【问题标题】:WCF service architecture queryWCF 服务架构查询
【发布时间】:2015-06-22 09:19:53
【问题描述】:

我有一个应用程序,它由一个 Web 应用程序和多个 Windows 服务组成,根据使用的后端软件版本,只安装一个 Windows 服务。

目前,Web 应用程序将数据保存在数据库中,然后安装相关服务,然后获取数据并将其发布到已安装的后端系统。

我想将其更改为使用 WCF 服务,以便将结果数据直接返回到 Web 应用程序。

我以前没有使用过 WCF 服务,但我假设我可以做这样的事情。

WebApp.Objects.Dll - 包含数据库对象,例如 PurchaseOrder 对象

WebApp.Service.Contracts.dll - 这里我可以描述服务方法,这将引用 WebApp.Objects.dll,所以我可以将 PurchaseOrder 对象作为参数

WebApp.Service.2011.dll - 这将是 2011 版后端系统的实际服务,这将引用 WebApp.Service.Contracts dll

WebApp.Service.2012.dll - 这将是 2012 版后端系统的实际服务,这将引用 WebApp.Service.Contracts dll

所以,我的问题是,Web 应用程序是否需要了解有关使用什么后端 WCF 服务的细节?我只想用指定的接口调用一个服务,而不关心它是如何实现的或它在内部做什么,而只是返回在后端系统中创建的采购订单(无论是返回接口还是具体类)

我是否能够创建服务客户端而不需要知道它使用的是 2011 年还是 2012 年的 WCF 服务?

【问题讨论】:

    标签: asp.net architecture wcfserviceclient


    【解决方案1】:

    只要您能够对所有版本使用完全相同的合同,Web 应用程序就不需要知道它正在访问哪个版本的 WCF 服务。

    在 Web 应用程序的配置中,您指定 URL 和合同。但是,除了合同之外,服务之间可能还有其他差异。在一个极端的例子中,这可能意味着 v2011 使用与后端的 v2012 不同的绑定 - 从您的描述来看,这不太可能。但配置文件或服务行为的细微差异也应在配置文件中解决。例如。如果 v2012 像 v2011 那样需要更长的时间来执行操作,则需要配置超时,以便 v2012 的更长时间不会导致过期。

    【讨论】:

    • 嗨,非常感谢,我正在考虑使用单个 dll 来存储合同,并且所有版本的服务都引用它以确保它们相同,多个后端服务都可以相同的东西,并且具有相同的参数,它们只是对后端软件使用不同的引用集,这就是为什么我不希望 Web 应用程序直接引用它们。如果 Web 应用所需要的只是一份合同和一个地址,那就太好了!
    • @WraithNath:我不知道所有细节,但也许你根本不需要 WCF(会降低部署和配置的复杂性、请求时间)。 WCF 的一个原因是,如果您想将服务部署到不同的机器上。只需为所有后端版本(合同)声明一个通用接口。为每个后端版本在单独的程序集中实现接口。在 Web 应用程序中,配置您要使用的具体实例并使用 Activator.CreateInstance 创建它。
    • 谢谢,我目前确实有一些 dll,我根据它的版本放入 bin 目录,如果它们在那里,它会通过反射加载它们。这确实工作得很好,但这确实意味着后端系统需要安装在 Web 服务器上,这有时不是最终用户想要的,我们的应用程序部署在服务器上,在某些情况下 Web 服务器已经可以公开访问,所以理想情况下,后端财务系统不想在同一个盒子上运行。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2011-11-20
    • 2018-01-31
    • 2011-05-18
    • 2012-07-11
    相关资源
    最近更新 更多