ASP.NET WebService запрещает удаленный доступ - PullRequest
0 голосов
/ 15 декабря 2009

Я создал 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, который нам не нужен.

Ответы [ 3 ]

1 голос
/ 15 декабря 2009

IIS позволяет вам белый / черный список IP-групп в своей конфигурации. Используйте это, чтобы заблокировать его для localhost. Вы также можете настроить брандмауэр так, чтобы никто не мог подключиться к этому порту извне.

1 голос
/ 15 декабря 2009

Я немного запутался здесь.

Будет ли это вызываться браузером? если это так, то вам следует разрешить удаленный доступ.

1 голос
/ 15 декабря 2009

Проверка по IP-адресу
Request.ServerVariables ["REMOTE_ADDR"]

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