我的公司有一款我觉得可以从Web服务API中受益的产品。我们使用MSMQ在后端系统中来回路由消息。目前,我们正在构建一个与Web服务(WCF)进行通信的ASP.Net应用程序,该应用程序又将与我们为MSMQ进行对话。稍后,我们可能会有其他客户端应用程序(不一定使用.Net编写)。进入MSMQ的消息是一个具有由字符串数组组成的属性的对象。还有一个属性包含将通过系统路由的命令(一个字符串)。就我个人而言,我不是这个的忠实粉丝,但我被告知它是为了可扩展性,并且每个系统都可以使用字符串。需要针对Web服务API的一些建议?
关于Web服务,我的想法是根据可传入和传出Web服务的数据对一些对象建模,以便客户端轻松使用它们。最初,我在上面提到的消息对象中传递了字符串数组。我发现我在客户端上创建对象来表示这些数据,使得客户端负责创建这些对象。我觉得Web服务层应该真的在处理这个问题。这就是我一直与服务合作的方式。我这样做是为了让我更方便地在客户端传输数据。
建议我们的小组,我们应该通过提供一个包含命令并拥有一个Web服务来处理所有事情的对象来维护系统中的“单一入口点”。所以,Web服务会有一个方法,我们称之为MakeRequest,它会返回一个对象(序列化的XML或JSON)。建议有一个基础对象,其中可能包含其他对象可以继承的某种类型的命令列表。任何其他对象都可能有自己的命令结构,但仍然继承基本命令。从服务中返回的内容现在还不清楚,但它可能是带有一个代表数据的对象的“消息对象”。我不知道。
我的建议是在我们的实际数据之后建模我们的对象,并为我们正在使用的数据类型创建服务。我们将创建一个基本服务接口,可以容纳所有服务使用的常用方法。因此,例如,GetById,GetByName,GetAll,Save等。特定于给定服务的任何内容都将针对该特定实现来实现。因此,用户服务可能有一个方法GetUserByUsernameAndPassword,但由于它实现了基本接口,它也将包含“基本”方法。根据被调用的服务,我们可以在服务中使用几种方法来返回预期的对象类型。我们可以将所有东西都放在一个服务中,但我仍然希望获得更多可用的东西。我觉得这种方法让客户无法决定要传递什么命令。当我连接到一个用户服务并调用方法GetById(int id)时,我期望获取一个User对象。
当我开始开发WCF服务时,我有幸与MS合作。所以,我对这项技术有了很好的基础和了解,但我不是这次设计它的人。 所以,我不反对“单一切入点”的想法,但任何想法为什么两种方法比其他方法更具扩展性将不胜感激。我以前从来没有使用这种系统的方法来服务层。也许我需要克服?
我觉得这是最长的问题日益;-) – sheikhjabootie 2011-03-02 14:15:54
我知道;)我很长篇大论的时候,但我想给尽可能多的信息成为可能。你应该看到我的一些电子邮件。当他们收到时,你可以听到互联网上的叹息;) – DDiVita 2011-03-02 14:20:57