正确设计Web服务和相关查询

时间:2009-06-10 13:24:34

标签: c# .net wcf service

我正在建立一个网络服务,我不确定最有效的设计..

将调用Web服务以使用人员列表及其相关信息填充远程网站。因此,在数据库中将有一个“人”表,然后是其他表,用于昵称,地址,电话号码等。页面可能会返回50个“人物”。

我认为我希望将#web服务调用保持在最低限度。那么只有一个调用GetPeople()的最佳方法是将所有人及其信息返回到一个xml中吗?或者我想让GetPeople()返回一个People列表,然后为每个人调用GetPeopleInfo()?

提前致谢

5 个答案:

答案 0 :(得分:1)

您需要考虑如何使用您的服务。

用户是否会在大多数情况下/所有时间都需要所有这些信息?如果是这样,则GetAllPeoplesDetails()返回所有内容

是合适的

如果他们很少需要所有信息,那么GetPeople()应该只返回一个人员列表。

如果你不确定那么你可以提供GetAllPeoplesDetails()和GetPeople()并让最终用户做出决定

答案 1 :(得分:1)

您是否有机会与使用网络服务的人交谈?最好的答案取决于许多因素,包括他们如何使用它。

最简单的方法是创建一个Web服务方法GetPeople(),该方法执行将Person表与其余表连接起来的查询,并返回一个平面表中的所有数据。如果客户端只是在单个列表/表中显示所有这些信息,那么这将是最好的选择。

另一方面,如果客户端要生成一个人员列表,然后单击以获取有关单独详细信息页面的更多详细信息,他们可能需要一个只返回名称的GetPeople()方法/ ids和GetPeopleInfo()拉回细节。如果这不会导致系统出现性能问题,那么这应该是相对简单的。

我可能会同时构建两个 - 创建一个GetPeople()方法,它可以带回所有数据{只要没有那么多的数据可以运输成为问题}和一个GetPersonInfo()方法可以让它们退回特定人员的详细信息。这为您的客户提供了最大的灵活性,而您无需付出太多额外的努力。

答案 2 :(得分:1)

在我看来,为您的用户提供选项,尤其是在他们分散的时候,这是您的最佳选择。有选项,如:

GetPeopleList():返回人名列表 GetPeopleAll():获取所有人和所有信息的列表 GetPersonInfo():获取1人的信息

只是我的意见,但通过让您的员工选择您的应用程序对他们更有用。

答案 3 :(得分:0)

我认为您的GetPeople()调用是合适的。您可以返回非常精简的结果集,如果需要,最终用户可以使用GetPeopleInfo()。如果结果集很大,您可能希望在方法中提供分页选项和结果计数,以允许调用者一次撤回一定数量的行。

答案 4 :(得分:-2)

XML很好。

JSON更好。

Dave Ward at Encosia uses DataTransferObjects to serialize his "Person" objects.

我一直在链接到这篇文章,因为它做得很好,这是一个常见的问题。

希望这有帮助,JP