Asp.net mvc 3 从ASP.NETMVC3调用WCF服务的最佳实践是什么?

Asp.net mvc 3 从ASP.NETMVC3调用WCF服务的最佳实践是什么?,asp.net-mvc-3,wcf,Asp.net Mvc 3,Wcf,我负责ASP.NETMVC3Web应用程序的解决方案体系结构,并希望确保遵循最佳实践。我以前曾经使用过MVC 3,但使用的是其他人提供的解决方案 我主要关心的是Web应用程序将使用WCF服务来检索和更新数据。我不认为直接从我的控制器方法调用WCF服务是最佳实践,但我不确定什么是好的替代方案(可能是存储库模式,这与WCF结合使用是否不寻常?)。我只是想知道是否有一个标准模式/实践我可以使用 此外,WCF服务是许多其他Web服务的包装器,因此它有自己的业务对象类。我不确定是否应该在MVC应用程序中的

我负责ASP.NETMVC3Web应用程序的解决方案体系结构,并希望确保遵循最佳实践。我以前曾经使用过MVC 3,但使用的是其他人提供的解决方案

我主要关心的是Web应用程序将使用WCF服务来检索和更新数据。我不认为直接从我的控制器方法调用WCF服务是最佳实践,但我不确定什么是好的替代方案(可能是存储库模式,这与WCF结合使用是否不寻常?)。我只是想知道是否有一个标准模式/实践我可以使用

此外,WCF服务是许多其他Web服务的包装器,因此它有自己的业务对象类。我不确定是否应该在MVC应用程序中的WCF服务类和模型类之间创建另一个抽象级别。例如,WCF服务有一个预订类,我是否需要在我的模型中为Web应用程序创建相同的类

任何帮助都将不胜感激。 谢谢

我的2美分

。。。我不认为直接从我的控制器调用WCF服务 方法将是最佳实践,但我不确定什么是好方法 替代方案是(可能是存储库模式[…])

不,不要再做抽象了。直接使用您的服务,将代理实例注入控制器,然后直接从那里调用WCF方法。如果您愿意,您可以创建一个包装类来处理一些WCF错误

在不久的将来,您的应用程序是否允许在WCF和数据库(作为数据源)之间轻松切换?如果不是远离存储库模式-保持简单,愚蠢

此外,WCF服务是许多其他Web服务的包装器 因此它有自己的业务对象类

不要编写复制粘贴代码,因为很难维护它。如果需要更改某个服务中的一种类型,则必须在其他服务中执行相同的镜像更改


相反,将所有通用业务对象分离到一个单独的项目(核心库)中,并在任何其他解决方案中重用该库

控制器负责获取/转换数据,因此它将通过代理与WCF服务交互。类似这样的内容(在VB.NET中):

您的WCF服务已经将“服务对象”转换为“业务对象”,因此您可以在UI层中将相同的“业务对象”视为“模型”。如果您有更轻的页面特定实体或JSON序列化实体,则可以根据需要创建其他模型


我通常建议在WCF服务上使用“服务适配器”,但在您的情况下,WCF服务似乎已经在这样做了。

谢谢,我相信这可以回答我的问题:)
'TODO: You could extract the channel creation in a generic reusable method (Of T)
Dim endpoint = New EndpointAddress() 'TODO: Initialize
Dim binding = New BasicHttpBinding() 'TODO: Initialize
Dim factory = New ChannelFactory(Of IYourContract)(binding, endpointAddr)
Dim channel = factory.CreateChannel()

Dim result = channel.YourOperation()