我有一个网络服务,可以做很多事情。它可以做的一个简单例子(注意例子):
前5个服务非常简单,因为请求被发送到SOAP Web服务,它将返回一个列表,或者它将更新数据库中的现有行或创建一个新行。
最后两个有点棘手,因为它们涉及将二进制文件发送到服务并从服务中接收二进制文件。
在服务器端实现SOAP服务没有问题。我已经有了一个框架,我现在只需要实现这些服务。我遇到的问题是如何实现将使用这些服务的客户端。
我一直在阅读有关SOAP客户端的信息,并知道我可以将文件作为SOAP附件发送,但我不太明白如何将其转换为HTTP请求。
问题:
我认为另一种选择是将客户端实现为胖客户端(桌面应用程序)。这个问题是我在基于GUI Swing的应用程序方面有0经验。
该解决方案的一个重要方面是它必须是安全的,因此无论使用哪种方法都需要使用证书进行保护。大多数服务将使用Spring技术实现。我使用Spring-WS作为Web服务,如果它可以作为Web门户使用,可能会使用Spring-MVC。
Web服务和Web应用程序都将在同一个应用程序服务器中运行。
答案 0 :(得分:2)
“我希望客户端成为一个门户网站,但我不太确定如何通过网络浏览器调用Web服务。这可能吗?”
好吧,如果您的ws支持HTTP(见下文),理论上您可以从浏览器向服务发送请求,但是它如何处理服务方法返回的非原始类型?也许你应该看一下RESTfull服务。
“如何通过浏览器调用Web服务?这是正常的HTTP调用吗?”
这取决于您使用的Web服务实现。几个网络服务,即Hessian&粗麻布或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。
“从门户网站(即从网络浏览器)调用网络服务是否常见?”
不要猜,请参阅REST服务及以上。
“......问题在于我在基于GUI Swing的应用程序方面有0经验。”
这可能是个问题,但可以使用NetBeans的图形编辑器轻松构建Swing应用程序。
“......无论使用哪种方法都需要使用证书进行保护。大部分服务都将使用Spring技术实现。”
为此,请查看Spring Security。这很好地满足了您的许多需求。
希望我能提供帮助。