使用SOAP公开CRUD操作

时间:2008-10-09 13:49:55

标签: soap crud

通过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 个答案:

答案 0 :(得分:3)

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

然后,您可以在顶层,WS-Secure,WS-Reliable消息传递等层叠您想要的任何其他内容。

答案 1 :(得分:2)

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

  • 除了执行操作所需的任何方法参数外,您还可以要求使用用户名和用户名。密码参数实际上在处理请求之前对发起方进行身份验证:可以通过返回SOAP异常来发出无法进行身份验证的信号。如果你特别偏执,你可以选择通过SSL运行服务

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

是的,通过SOAP运行请求会产生开销(与公开直接数据库访问相反) - 即将请求包装到HTTP请求中的处理时间,打开套接字&发送它(和接收端的反向和响应的反向) - 但是,它确实有优势。

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

通过SOAP Web服务本身暴露CRUD操作没有任何问题。

你会发现很多这类服务的例子。

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

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

相关问题