#asp.net-mvc #web-services #asp.net-mvc-2 #asp.net-mvc-3 #asynchronous
#asp.net-mvc #веб-службы #asp.net-mvc-2 #asp.net-mvc-3 #асинхронный
Вопрос:
У меня есть ASP.NET Приложение MVC, представляющее некоторые данные, и я хочу, чтобы оно
- откройте новую вкладку или
- перенаправление в новое представление
когда веб-служба подает мне сигнал. Предполагается, что этот WS обрабатывает некоторые внешние данные и запросы, и когда вызывается какое-то конкретное действие, я хочу, чтобы оно могло передавать моему веб-приложению какой-то сигнал.
Я думал об использовании Html.Action
для асинхронного контроллера, но тогда я не знаю, как передать сигнал от WS контроллеру (или всем их экземплярам).
Надеюсь, это понятно. У вас есть идея, что нужно сделать?
Заранее спасибо.
Комментарии:
1. вы не можете открыть новую вкладку программно. И как реализован ваш WS? Используете ли вы WCF?
2. Нет WCF, просто
System.Web.Sevices
.3. поправьте меня, если я ошибаюсь, вы хотите сделать это > пользователь инициирует WS из своего браузера, WS обрабатывает запрос, а затем вызывает ваш контроллер, затем контроллер может либо открыть новую вкладку, либо перенаправить. ? Я не думаю, что вы можете перенаправить запрос от WS к контроллеру. Это может быть сделано, если WS вернет ответ пользователю, и вы снова отправите запрос контроллеру, используя Javascript.
4. Нет, пользователь просматривает веб-приложение. Затем на каком-то другом канале обрабатываются данные (поступает вызов и регистрируется в БД) с использованием веб-службы. Этот WS также должен сигнализировать веб-приложению, которое в ответ изменит текущее представление, представленное конкретному пользователю, на какое-либо другое представление, информирующее пользователя о том, что действие выполнено (входящий вызов).
Ответ №1:
Итак, в основном ваша проблема сводится к тому, что состояние сервера изменено (через WS), и мы хотим, чтобы что-то произошло на стороне клиента, где просматривается ваше веб-приложение.
Честно говоря, это не так просто. Интернет работает на архитектуре Клиент -> сервер. Пользователь отправляет запрос на сервер, сервер отвечает. То, что вы пытаетесь сделать, является обратным этому. Вы хотите отправить запрос с сервера пользователю. Протокол HTTP так не работает.
Прямо сейчас, чтобы сделать что-то подобное, используются следующие две стратегии:
-
Websockets: попробуйте выполнить поиск по ним в Google. Вы создаете сокет между клиентом и сервером, и как только сервер обновляется WS, он отправляет запрос клиенту через сокет. Вы можете попросить его перейти к другому представлению или открыть новое окно. Недостатком этого является то, что он не поддерживается большинством браузеров. Может потребоваться год или около того, чтобы быть. Сейчас не очень рекомендую.
-
Опрос: вы можете отправлять Ajax-запросы из своего браузера на сервер через определенные промежутки времени (вы знаете, примерно каждые 5 секунд) и видеть, изменилось ли состояние сервера или сейчас. Если да, то делайте свое дело. Это наиболее распространенный метод. Twitter.com использует его. Существует также другая его версия, называемая Comet или Длинный опрос, но я не буду вас этим смущать.
Здесь важно отметить, что все, что вы хотите сделать (открыть вкладку, изменить вид и т.д.), Вы должны делать это через Javascript на стороне клиента.
надеюсь, это поможет
Комментарии:
1. Спасибо, у меня уже есть подход опроса, но он показался мне неэффективным. Я знал, что есть какой-то другой способ, но не знал, как его искать.