Я создал ASP.NET WebService, который должен использоваться с использованием ASP.NET Ajax. WebService расположен на том же компьютере и в том же веб-приложении, которым он будет использоваться, поэтому я не хочу разрешать удаленный доступ к этому веб-сервису, а должен отвечать только на запросы от localhost.
Web.Config НЕ имеет раздела конфигурации и поэтому не имеет httpPost и httpGet включены. Это отлично. Однако, если я перехожу непосредственно к URL-адресу WebService с удаленного компьютера, он все равно загружается и показывает мне список методов. Нажав на метод, я получаю сообщение о том, что форма тестирования недоступна для удаленных машин (как и предполагалось), но в ней содержится информация о том, как выполнить запрос на мыло и обработать ответ на мыло.
Кроме того, я полагаю, что меня забирает бот какой-то просто любопытного пользователя, потому что теперь я получаю сообщение об ошибке в моем журнале, такое как это ...
System.InvalidOperationException: Request format is unrecognized for URL
unexpectedly ending in '/ValidateUsername'.
Это происходит, если вы пытаетесь выполнить GET-запрос (манипулируя строкой запроса) к службе удаленно. Я рад, что он не обрабатывает запрос, поскольку я не хочу, чтобы удаленные пользователи имели доступ к этому сервису, но я бы предпочел, чтобы он не выдавал ошибку.
Как я могу заблокировать веб-сервис, чтобы он не был доступен для удаленного компьютера, но все еще был доступен для локального компьютера в качестве службы ScriptService, потребляемой ASP.NET Ajax?
UPDATE:
Хорошо, вот рабочий пример того, что происходит.
Сайт: http://so.weirdwes.dyndns.org/default.aspx
WebService: http://so.weirdwes.dyndns.org/services/services.asmx
Web.Config:
<webServices>
<protocols>
<remove name="HttpGet"/>
<remove name="HttpPost"/>
</protocols>
</webServices>
Сайт использует WebService с использованием тега ScriptManager и ScriptReference. Вы заметите, что если вы нажмете кнопку, веб-сервис вызывается, и все работает, даже если Post и Get были удалены. Это хорошо, так как мы хотим, чтобы это работало. Вопрос в этом ....
http://so.weirdwes.dyndns.org/services/services.asmx/GetRemoteAddr
Server Error in '/' Application.
--------------------------------------------------------------------------------
Request format is unrecognized for URL unexpectedly ending in '/GetRemoteAddr'.
Бот или что-то извлекает этот URL, и он генерирует ошибки, о которых мы получаем уведомление. Я хочу подавить эту ошибку или полностью ее заблокировать. Если я изменю Web.Config и снова добавлю протоколы Get и Post, эта ошибка исчезнет - но тогда он разрешит удаленный доступ к веб-службе с помощью Get, который нам не нужен.