Подтвердить что ты не робот

"Форма теста доступна только для запросов с локальной машины".

Я создал веб-службу в .NET, поэтому адрес служебного файла содержит отличное автогенерированное объяснение того, как он работает. Когда я запускаю страницу с машины, на которой он размещен, даже имеет форму, которую я могу использовать для отправки тестовых значений в службу. Однако на удаленных машинах он скрывает форму и дает сообщение, как показано выше.

Есть ли смысл в этом? Я видел, что другие сайты называют это "более безопасным", но каждый может создавать свои собственные формы, легко делая это не более чем неприятностью, если вы спросите меня.

4b9b3361

Ответ 1

Если вы публикуете метаданные, а это общедоступный/незащищенный веб-сервис, вы правы, было бы легко, чтобы кто-нибудь мог создать простого клиента, чтобы отработать ваш веб-сервис. В этом случае наличие веб-клиента, созданного только на локальной машине, кажется неприятным.

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

Я полагаю, что политика создания пользовательского интерфейса для веб-служб ASMX только на самом сервере была попыткой предоставить некоторые полезные инструменты, исключив случайные дыры в безопасности. WCF покончил с этим в любом случае, вы можете создавать клиентов только в том случае, если метаданные публикуются, и им необходимо внедрить правильную защиту для доступа к сервисам.

Ответ 2

Вы можете обойти эту проблему, изменив свой web.config, чтобы включить эти узлы:

<configuration>
    <system.web>
     <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>
    </system.web>
</configuration>

Это позволит вам посетить веб-службу .asmx через ваш браузер. Затем вы можете вызвать веб-службы прямо в своем браузере, передать аргументы и просмотреть результаты.

Ответ 3

Просто FYI Я использую .NET 4.0 и имею эту же проблему.

Однако я использовал...

<add name="HttpSoap12"/>
<add name="HttpSoap"/>
<add name="HttpGet"/>
<add name="HttpPost"/>

В тех же областях, и это сработало. Но только с HttpGet и HttpPost этого не произошло.