2

我有一个做很多事情的网络服务。它可以做的事情的一个简单示例(请注意示例):

  • 退货产品清单
  • 更新产品价格
  • 添加新产品
  • 更新现有产品
  • 退货商品价格
  • 返回产品手册+图片
  • 添加产品手册+图片

前 5 个服务非常简单,因为向 SOAP Web 服务发送了一个请求,它要么返回一个列表,要么更新数据库中的现有行或创建一个新行。

最后两个有点棘手,因为它们涉及将二进制文件发送到服务并从服务接收二进制文件。

在服务端实现 SOAP 服务是没有问题的。我已经有了一个框架,我现在只需要实现这些服务。我遇到的问题是如何实现将使用这些服务的客户端。

我一直在阅读有关 SOAP 客户端的信息,并且知道我可以将文件作为 SOAP 附件发送,但我不太明白如何将其转换为 HTTP 请求。

问题:

  • 我希望客户端成为 Web 门户,但我不太确定如何从 Web 浏览器调用 Web 服务。这可能吗?
  • 浏览器中的 Web 服务调用如何工作?这是一个正常的 HTTP 调用吗?
  • 最重要的是,二进制文件的上传/下载如何工作?
  • 在保护请求方面,哪个更安全?基于 Web 门户的客户端还是基于胖客户端的客户端?
  • 使用 Java Web Start/JNLP 代替 Web 门户或胖客户端有什么优势吗?
  • 是否可以在 Web 门户和 Web 启动之间混合和匹配以进行二进制数据传输?
  • 从 Web 门户(即从 Web 浏览器)调用 Web 服务是常见的做法吗?

我认为另一种选择是将客户端实现为胖客户端(桌面应用程序)。问题是我在基于 GUI Swing 的应用程序方面经验不足。

该解决方案的一个重要方面是它必须是安全的,因此无论我使用哪种方法都需要使用证书进行保护。大多数服务将使用 Spring 技术实现。我正在为 Web 服务使用 Spring-WS,如果它可以用作 Web 门户,我可能会使用 Spring-MVC。

Web 服务和 Web 应用程序都将在同一个应用程序服务器中运行。

4

1 回答 1

2

“我希望客户端成为 Web 门户,但我不太确定如何从 Web 浏览器调用 Web 服务。这可能吗?”

好吧,如果您的 ws 支持 HTTP(见下文),理论上您可以从浏览器向服务发送请求,但是它将如何处理您的服务方法返回的非原始类型呢?也许你也应该看看 RESTfull 服务。

“从浏览器调用 Web 服务是如何工作的?它是普通的 HTTP 调用吗?”

这取决于您使用的 Web 服务实现。一些 web 服务,例如 Hessian & Burlap 或 Spring HttpInvoker,支持 http 传输,有些可能不支持。调用将是具有附加参数和附件的普通 http url(我猜 http 的 post 方法是访问 http web 服务的常用方法)。

“最重要的是,二进制文件的上传/下载如何工作?”

这也取决于。我最近尝试使用Hessian上传文件,但是当文件大小达到一定限制(大约 30MB 左右)时它失败了。一个论坛条目告诉我这是由Hessians序列化策略引起的,但我没有找到解决方案。检查您的 ws 是否支持MTOM,就像CXF一样,这使我的上传工作正常。在 cxf 主页上也有一个上传图片的示例。

“在保护请求方面,哪个更安全?基于 Web 门户的客户端还是基于胖客户端的客户端?”

两种客户端类型都从服务器发送/接收数据,因此必须保护连接。使用胖客户端(除了安全令牌和信任策略),您可能还需要自定义登录功能来验证您的客户。所以最后,正确使用技术很重要,正如您所知,如果实施不当,标准的 http 登录也可能非常不安全。

“使用 Java Web Start/JNLP 代替 Web 门户或胖客户端有什么优势吗?”

使用 WebStart,您将需要构建一个自定义客户端和至少一个页面或 servlet。这是一种自动下载/安装/升级您的自定义客户端的技术。

“对于二进制数据传输,是否可以在 Web 门户和 Web 启动之间混合和匹配?”

是的。如果您使用的是 Spring,那么很容易让您的客户访问相同的功能。只需将您的普通逻辑添加到服务外观 (@Service)。然后使用 MVC 控制器 (@Controller) 添加浏览器支持,并使用ServiceExporter添加 ws 支持,例如。

“从 Web 门户(即从 Web 浏览器)调用 Web 服务是常见的做法吗?”

猜不出来,请参阅 REST 服务及以上。

“...问题是我在基于 GUI Swing 的应用程序方面经验不足。”

这可能是个问题,但是可以使用 NetBeans 的图形编辑器轻松构建 Swing 应用程序。

“......无论我使用哪种方法,都需要使用证书进行保护。大部分服务将使用 Spring 技术实现。”

为此,请查看Spring Security。这很好地集成了您的许多需求。

希望我能帮上忙。

于 2012-04-19T20:28:51.657 回答