Как однозначно идентифицировать клиентский компьютер в приложении ASP.NET? - PullRequest
3 голосов
/ 06 января 2011

У меня есть серверное приложение, которое работает в размещенной среде, но создает задания на печать в локальной сети клиента (за NAT; механизм этого не имеет значения).

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

Опции, которые я исключил:

  • Переменные заголовка хоста (ничего не идентифицируется)
  • Cookies, в поддержку выбора пользователя.Это несколько учитывает вероятность ошибки пользователя, но не совсем.
  • HTML5 DOM Storage - не поддерживается браузером клиента

Любые другие идеи?

ПравитьУ меня есть возможность поместить эту функцию (создать задание на печать) в приложение толстого клиента.Приложение, конечно, может быть настроено, и проблема исчезнет.Но пользовательский интерфейс будет страдать от необходимости переключаться между браузером и приложением Windows.

Ответы [ 3 ]

7 голосов
/ 06 января 2011

Я не буду обсуждать ваш странный сценарий, просто отвечу на ваш вопрос: как идентифицировать машину?

Что ж, в настоящее время нет решения для закрытой формы с протоколом HTTP,Все машины имеют один и тот же IP-адрес, поскольку находятся за NAT.Вы не можете получить MAC-адрес.Вы не можете получить аппаратные идентификаторы.Вы не можете быть уверены, что все машины будут отправлять на сервер разные заголовки (т. Е. Все разные браузеры / версии).

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

Как только файлы cookie не будут удалены (возможно, вы всегда можете обновить файл cookie, вы никогда не узнаете ...), у вас есть простой механизм.

Это лучшее, что я могу предложить: (

0 голосов
/ 12 июня 2011

Если REMOTE_ADDR на самом деле работает как рекламируется, вы пробовали его брата, REMOTE_HOST?Если HOST не работает, но ADDR работает, то

RemoteHostOughta = GetHostEntry(Request.ServerVariables("REMOTE_ADDR")).HostName

К сожалению, есть некоторые настройки, о которых я не знаю, так что мой IIS получает IP-адрес сервера (а не маршрутизатора!) Вместопульт, когда я читаю REMOTE_ADDR

0 голосов
/ 06 января 2011

Если вы посмотрите на серверные переменные, когда они сделают запрос, у вас будет Request.ServerVariables ["REMOTE_ADDR"];который, вероятно, будет внутренним IP, если приложение является внутренним / интранет.Также есть REMOTE_HOST.Иногда они отфильтровываются через прокси / брандмауэры / nat, но, надеюсь, не в вашей ситуации.

Вы также можете вызвать их в объекте HTTPRequest, например, Request.UserHostAddress.Возможно, вам понадобится получить его в соответствии с текущим контекстом HTTPContext.Current.Request.UserHostAddress.

Если вы не можете этого получить, просто верните документ, данные, файл в Запрос, чтобы они распечатались, и выберитепринтер с помощью Response.BinaryWrite (), задающий тип содержимого файла, к которому они обращаются.

Здесь перечислены все серверные переменные для IIS, поскольку вы используете ASP.NET: http://msdn.microsoft.com/en-us/library/ms524602(v=vs.90).aspx

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

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