2015-06-22 72 views
0

我有一个由Web应用程序和多重Windows服务组成的应用程序,根据使用的是哪个版本的后端软件,只安装一个Windows服务。WCF服务体系结构查询

当前,数据由Web应用程序保存在数据库中,然后安装相关服务,然后将数据提取到已安装的后端系统中。

我想改变这个使用WCF服务,所以结果数据直接返回到Web应用程序。

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

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

WebApp.Service.Contracts.dll - 在这里我可以描述的服务方法,这将参考WebApp.Objects.dll这样我就可以拿了一个采购订单对象作为参数

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

WebApp.Service .2012.dll - 这将是2012版后端系统的实际服务,这将引用因此,我的问题是,Web应用程序是否需要知道有关后端WCF服务的具体使用情况?我只想调用具有指定接口的服务,而不关心其实现方式或内部执行方式,而只是返回在后端系统中创建的采购订单(无论它是返回接口还是具体的类)

我能否创建服务客户端而无需知道其2011或2012年WCF服务是否正在使用?

回答

1

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

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

+0

嗨,多数民众赞成在此我非常感谢,有一个单一的dll来存储合同,所有版本的服务引用这个以确保它们是相同的,多个后端服务都做同样的事情,并且有相同的参数,他们只是使用一组不同的引用到后端软件,这就是为什么我不希望网络应用程序直接引用它们。如果所有的网络应用程序的需求是一个合同和地址,将工作得很好! – WraithNath

+1

@WraithNath:我不知道所有的细节,但也许你根本不需要WCF(会降低部署和配置的复杂性,请求时间)。 WCF的一个原因是,如果你想将服务部署到不同的机器上。只需为所有后端版本(合同)声明一个通用接口。在每个版本的后端的独立程序集中实现接口。在Web应用程序中,配置要使用的具体实例并使用Activator.CreateInstance创建它。 – Markus

+0

谢谢,我目前有一些dll,根据它是什么版本进入bin目录,如果它们在那里,它会通过反射装载它们。这确实工作得很好,但这确实意味着后端系统需要安装在Web服务器上,而这有时并不是最终用户想要的,我们的应用程序部署在跨服务器的某些情况下,已经可以公开访问Web服务器,所以后端财务系统不希望理想地在同一个盒子上。谢谢! – WraithNath