2011-07-07 59 views
1

我刚刚开始使用web.api开发一个WCF服务项目,以便为我们现有的asp.net mvc web应用程序的移动版本提供数据。WCF Web服务和从数据库检索 - 使用现有的asp.net服务层?

到目前为止,我已使用此WCF web.api getting started tutorial得到一些东西在运行,在ServiceContract中创建假数据。

服务合同是这样的:

[WebGet(UriTemplate = "")] 
    public IQueryable<Workspace> Get() 
    { 
     //I want to use our existing service layer like this: 
     //WorkspaceService service = new WorkspaceService(); 
     //service.ReturnAllWorkspacesByUsername("mary"); 

     //this is fake data for testing 
     var workspaces = new List<Workspace>() 
     { 
      new Workspace() {Id = new Guid(), Title = "Implement WCF Web Services"}, 
      new Workspace() {Id = new Guid(), Title = "Add APIs to WebService"}, 
      new Workspace() {Id = new Guid(), Title = "Map Routes"}, 
      new Workspace() {Id = new Guid(), Title = "Expose Resources"}, 
     }; 
     return workspaces.AsQueryable(); 
    } 

我想用现有的MVC应用程序尽可能,我该如何使用现有的服务层和领域模型最好的,或者是它的最佳实践不是?将服务分开更好吗?

有人可以指向我一些很好的初学者教程吗?

感谢, 凯

回答

0

我希望有一个共同的过程中的商业逻辑层。 DTO(数据传输对象)用于跨层进行通信。当数据访问层基于EF时,我更喜欢使用DTO的POCO实体。现在,对于外部应用程序或不同的UI,我构建了不同的服务层 - 它将在进程BL和DTO中使用相同的数据来获取数据。但是,我更喜欢为服务设置单独的数据合同类。

分离背后的逻辑是BL层API可以更加健谈(正在进行中的层),而服务API将基于无状态的块状交互。您可能通过服务暴露有限的功能和/或不同的API(因为潜在的印象是服务将被外部应用程序使用)。 DTOs & DataContract也是可取的,因为两者都可以以不同的方式和不同的时间进行改变。数据合同更改必须进行控制和版本控制,但同样可能不适用于DTO(或域对象)。

就您的移动用户界面而言,它不需要使用服务,而是直接依赖进程内BL层。如果您的原始MVC应用程序是分层应用程序,则这是可能的。

另一个观察 - 从WCF服务返回IQueryable没有意义。您可以返回一组对象,如果需要,客户端应用程序可以投射到IQueryable

+0

谢谢:)我很欣赏回复。我想我会尽可能地使用现有的服务层,并对DTO进行一点或研究。 – Kai