[英]MVC 4 - consuming a WCF in a data layer
在我的测试项目中,我创建了一个WCF服务并使其运行。 接下来,我创建了一个MVC 4项目。 它在一个解决方案下分成几层。
要进行快速测试:在UI层,我添加了一个Web引用到我的WCF服务。 在控制器中,我通过“使用”联系WCF服务以填充视图中的下拉列表。
但是,我正在驾驶与依赖注入分离。
在存储库层中,我创建了一个带有填充下拉列表的接口并将其注入。 不是问题。
我正在努力解决的问题是:
这让我想到另一个问题 - 如果我在单独的项目(层)中创建对WCF服务的Web引用,则主config.sys文件中不存在与WCF服务相关的信息...
所以我正在努力抓住这一部分...我还应该阅读更多内容吗?
意识到你的蛋糕可以在很多方面切割,我在这里介绍如何切割它:
问题1:“我是否在UI层中使用WCF服务并在存储库层中引用它?” 首先:正如史蒂文在你的评论中指出的那样,你应该深入考虑是否要注入第三个服务器层。 UI层可以重命名为“IIS中托管的图层”。 这样做使其成为MVC表示层和服务主机层的主机层。 但是,这并不意味着您的服务是在此层中实现的,只是它们在此处托管(仅在web.config中引用接口和实现名称空间的问题)。
问题2:“我是否创建了另一个项目 - 数据层 - 然后从存储库添加Web引用到WCF服务,我创建了对数据层的引用?” 在我读到这篇文章时,你会同时提出多个问题:是的,你应该创建一个单独的层来封装存储库。 不,你不应该让这个图层包含任何与wcf相关的内容。 如果服务器层需要客户端访问wcf服务,则应将其分为逻辑层,或者作为businesslogic层中的文件夹,或者作为单独的物理“数据适配器层”。 永远不会在您的存储库层。 虽然概念上wcf数据适配器层与存储库层处于同一级别,但您不应在同一逻辑层或物理层中混合使用数据库访问和服务访问。
第三个问题我只能回答一个问题:您希望WCF在您的架构中实现满足的目的是什么? 您是要注入单独的服务层还是让层分离与层分离混淆?
层分离可以在进程内运行时耦合,而层分离只能通过某种网络远程处理(例如wcf)耦合运行时。
正如史蒂文在评论中指出的那样,你真的记录了在你的架构中使用wcf的必要性。
让我们根据逻辑层和层(切蛋糕)来看待您的架构:
客户端访问层(#1,在浏览器的上下文中运行)
Web-Host-Layer(#2,代表外部服务器层,包含所有MVC代码。也许Model存在于其自己的物理层中。
服务层(在您的架构中尚未存在,因为没有必要证明这种层进一步抽象为层)
业务层(#2,表示介绍与数据库和数据访问层之间的业务逻辑)
存储库层(#2,封装数据库访问逻辑和映射)
服务访问层(#2,封装对外部服务的访问,可以实现为BL层或单独的物理层中的文件夹)
数据库层(#3,sql server)
那么您是否在使用IIS作为主机并使用C#作为实现语言来询问如何在WCF中实现DI。
要么。
您是否要求构建n层.net应用程序的一般指导。
第一个很容易,因为那里有很多例子,比如这个
第二个更棘手,因为答案永远是“它取决于”。 这取决于您的需求,您的专业水平,项目预计的时间长度等等。
希望这对你有所帮助。
如果你想我可以发送给我执行wcf统一的行为。
概念:
逻辑层 - 用于隔离责任的架构概念。 层具有向下耦合,从不向上。
物理层 - 用于强制逻辑分离的实现构造。 .net程序集可用作物理层的实现。
层 - 可以存在于未托管其他层的计算机上的一个或多个层。
听起来像你将WCF调用视为数据源,这使得它非常适合存储库层。 存储库的工作是从其他层抽象出数据源实现的知识。
我建议不要使用.NET项目来强制执行层边界,而是使用同一项目中的文件夹来强制逻辑分离而不是物理分离。 大多数用例不需要物理隔离,这增加了复杂性,例如您注意到的配置更加困难。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.