使用SOAP公开CRUD操作

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

通过SOAPWeb服务公开CRUD操作是个坏主意吗?我的直觉告诉我,这不仅仅是因为执行数据库调用的开销可能很大。我很难找到支持/反对这种(反)模式的文档,所以我想知道是否有人能向我指出一些文档或对这个问题有自己的看法。

Also, if anyone knows of best practises (and/or documentation to that effect) when designing soap services, that would be great.

下面是一个Web服务外观的示例:

  • Create
  • Delete
  • Execute
  • Fetch
  • Update

And here's what the implementation would look like:

[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);
}
提问于
用户回答回答于

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

  • 除了执行操作所需的任何方法参数之外,您还可以要求用户名和密码参数,这些参数实际上是在处理请求之前对发起方进行身份验证:身份验证失败可以通过返回SOAP异常发出信号。如果您特别偏执,您可以选择在ssl上运行服务。
  • 您可以使用服务器解决方案来处理基于IP的请求筛选器的发送和接收,onyl允许来自已批准地址列表的请求。

Yes, there are overheads to running requests over SOAP (as opposed to exposing direct database access) - namely the processing time to wrap a request into a HTTP request, open a socket & send it (and the reverse at the receiving end and the again for the response) - but, it does have advantages.

Java (though the NetBeans IDE) and .Net (through VS), both support consumption of Web Services into projects / solutions - the biggest benefit of this is that objects / structures on the remote service are automatically translated into native objects in the consuming application, which is exceptionally handy.

用户回答回答于

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

Then you can layer whatever else you want on top, WS-Secure, WS-Reliable messaging and so on.

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励