2

通过 SOAP Web 服务公开 CRUD 操作是个坏主意吗?我的直觉告诉我,这并不是最不重要的,因为进行数据库调用的开销可能很大。我正在努力寻找支持/反对这种(反)模式的文档,所以我想知道是否有人可以向我指出一些文档或对此事有意见。

此外,如果有人在设计肥皂服务时知道最佳实践(和/或相关文档),那就太好了。

以下是 Web 服务外观的示例:

  • 创造
  • 删除
  • 执行
  • 拿来
  • 更新

下面是实现的样子:

[WebMethod]
public byte[] Fetch(byte[] requestData)
{
    SelectRequest request = (SelectRequest)Deserialize(requestData);

    DbManager crudManager = new DbManager();
    object result = crudManager.Select(request.ObjectType, request.Criteria);

    return Serialize(result);
}
4

4 回答 4

3

如果您想以 RESTful 方式使用 SOAP,那么有一个有趣的标准WS-Transfer;它提供松散耦合的 CRUD 端点;您从中检查消息并相应地对您的实体采取行动。

然后,您可以在顶部添加任何您想要的东西,WS-Secure、WS-Reliable 消息传递等等。

于 2008-10-09T14:20:56.310 回答
2

我认为发布一个 SOAP 服务将 CRUD 操作暴露给匿名的公共“用户”将是一个特别糟糕的主意。但是,如果您可以限制这些警告中的一个或两个,那么我认为它没有任何问题(而且我已经多次实施此类服务)。

  • 除了执行操作所需的任何方法参数之外,您还可以要求在处理请求之前有效地验证发起者的用户名和密码参数:可以通过返回 SOAP 异常来表示验证失败。如果您特别偏执,您可以选择通过 SSL 运行服务

  • 您可以让服务器解决方案处理基于 IP 的请求过滤器的发送和接收,只允许来自已批准地址列表的请求。

是的,通过 SOAP 运行请求存在开销(与公开直接数据库访问相反) - 即将请求包装到 HTTP 请求、打开套接字并发送它的处理时间(以及在接收端反之亦然)对于响应) - 但是,它确实有优势。

Java(通过 NetBeans IDE)和 .Net(通过 VS)都支持将 Web 服务消费到项目/解决方案中 - 最大的好处是远程服务上的对象/结构会自动转换为消费应用程序中的本地对象,非常方便。

于 2008-10-09T14:12:20.413 回答
2

如果您只想通过 Web 进行 CRUD,我会研究一些不同的技术来执行 REST 而不是使用 WS*。 SQL Data Services(以前称为 Project Astoria)实际上可能是一个不错的选择。

于 2008-10-09T14:12:40.880 回答
0

通过 SOAP Web 服务本身公开 CRUD 操作并没有错。

您显然会发现很多此类服务的示例。

但是,根据您的特定要求,您可能会发现使用 SOAP 对您来说开销太大,或者您最好使用 JSON/AJAX 等。

因此,我相信,除非您提供有关您的特定详细信息的其他详细信息,否则您的问题没有好的答案。

于 2008-10-09T14:07:05.697 回答