Вызвать действие контроллера из веб-службы

#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 так не работает.

Прямо сейчас, чтобы сделать что-то подобное, используются следующие две стратегии:

  1. Websockets: попробуйте выполнить поиск по ним в Google. Вы создаете сокет между клиентом и сервером, и как только сервер обновляется WS, он отправляет запрос клиенту через сокет. Вы можете попросить его перейти к другому представлению или открыть новое окно. Недостатком этого является то, что он не поддерживается большинством браузеров. Может потребоваться год или около того, чтобы быть. Сейчас не очень рекомендую.

  2. Опрос: вы можете отправлять Ajax-запросы из своего браузера на сервер через определенные промежутки времени (вы знаете, примерно каждые 5 секунд) и видеть, изменилось ли состояние сервера или сейчас. Если да, то делайте свое дело. Это наиболее распространенный метод. Twitter.com использует его. Существует также другая его версия, называемая Comet или Длинный опрос, но я не буду вас этим смущать.

Здесь важно отметить, что все, что вы хотите сделать (открыть вкладку, изменить вид и т.д.), Вы должны делать это через Javascript на стороне клиента.

надеюсь, это поможет

Комментарии:

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