如何从Web服务请求/响应中删除链接引用

时间:2012-02-22 13:16:29

标签: web-services client xss

我有一个使用Java编写的客户端的Web服务。该服务在防火墙后面工作,如果java客户端想要使用该服务,则其请求被阻止,因为该请求包含链接。所以请求包含这样的验证器引用:

...<S:Envelope xmlns:S="http://schemas.xmlsoap.org/wsdl/"...

我要在wsdl文件中修复它吗?这是唯一包含此链接的地方:

<definitions targetNamespace="http://mycompany.com/" name="RentalServiceService"
             xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsp="http://www.w3.org/ns/ws-policy"
             xmlns:tns="http://mycompany.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"

如果我从wsdl文件生成.net中的客户端,那么它不会将任何链接引用放入请求中... 谢谢 佐尔坦

1 个答案:

答案 0 :(得分:1)

不要从XML消息中删除命名空间。改为配置防火墙!

通常情况下,SOAP对防火墙很友好,因为它背靠HTTP。如果从XML中删除命名空间,则可能通过防火墙获取它,但必须使用该消息的Web服务可能无法解析它,因为您从中删除了命名空间。 XML namespaces非常重要,因为它们可以正确识别邮件中每个元素所属的域。

正如观察一样,<S:Envelope xmlns:S="http://schemas.xmlsoap.org/wsdl/"...是某种类型的复制粘贴错误?...或者可能是问题的一部分?! SOAP信封的名称空间对于SOAP 1.1应为http://schemas.xmlsoap.org/soap/envelope/,对于SOAP 1.2应为http://www.w3.org/2003/05/soap-envelope

除此之外,如果SOAP消息格式正确,它应该通过防火墙。如果没有,那么解决方案是正确配置防火墙而不是弄乱SOAP消息。您的网络管理员应该花时间了解Web服务安全性并正确配置防火墙。

我的建议是将端口80仅用于您的用户对浏览器的请求/响应,并使用正确的配置在不同的端口号上公开该服务。也许你甚至可以在reverse proxy内设置一个DMZ来提高网络服务的安全性。这样,您就不会将内部Web服务服务器直接暴露给Internet。