Как удалить ссылки ссылки из запроса / ответа веб-службы - PullRequest
1 голос
/ 22 февраля 2012

У меня есть веб-сервис с клиентом, написанным на Java. Служба работает за брандмауэром, и если клиент 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"

Если я создаю клиента в .net из файла wsdl, то он не помещает ссылки ссылок в запрос ... Спасибо Золтан

1 Ответ

1 голос
/ 26 февраля 2012

Не удалять пространства имен из сообщения XML. Вместо этого настройте брандмауэр!

Обычно SOAP дружественен к брандмауэрам, потому что он поддерживает HTTP. Если вы удалите пространства имен из XML, вы можете получить его через брандмауэр, но веб-служба, которая должна использовать сообщение, может не проанализировать его, поскольку вы удалили из него пространства имен. Пространства имен XML важны, поскольку они правильно идентифицируют домен, к которому принадлежит каждый элемент сообщения.

Как наблюдение, <S:Envelope xmlns:S="http://schemas.xmlsoap.org/wsdl/"... - это какая-то ошибка копирования-вставки? ... или, возможно, часть проблемы ?! Пространство имен для конверта SOAP должно быть http://schemas.xmlsoap.org/soap/envelope/ для SOAP 1.1 или http://www.w3.org/2003/05/soap-envelope для SOAP 1.2.

Кроме того, если сообщение SOAP правильно отформатировано, оно должно проходить через брандмауэр. Если это не так, то решение состоит в том, чтобы правильно настроить брандмауэр и не связываться с SOAP-сообщением. Администраторы сети должны потратить время на понимание безопасности веб-служб и правильно настроить брандмауэр.

Мое предложение состояло бы в том, чтобы оставить порт 80 только для запросов / ответов ваших пользователей из браузеров и предоставить сервису другой номер порта с правильной конфигурацией. Возможно, вы могли бы даже настроить обратный прокси внутри DMZ для повышения безопасности веб-службы. При этом вы не будете выставлять свой внутренний сервер веб-службы напрямую в Интернет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...