2013-10-05 2 views
3

Я ищу способ, которым пользователь может связываться между приложениями ASP и Winform.Связь между ASP MVC и приложениями WinForm

Я ищу что-то вроде soluto.com, я хочу, чтобы пользователь посылал команды на другие компьютеры через Веб-сайт. Итак, допустим, пользователь подписался на 10 компьютеров, которые зарегистрированы в приложении mvc. Пользователь может выбрать все 10 компьютеров и отправить «Сделать это задание» одним нажатием кнопки.

Я что-то думаю, Winform создаст сервер httplisten. Каждый раз, когда winform открыт, он отправляет сообщение «Я онлайн» в mvc, а также IP: Порт. При необходимости сервер отправит запрос на этот ip: порт.

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

Мне было интересно, существует ли какой-либо другой способ выполнения этого.

Благодарим за помощь.

P.S. Прежде чем вы заявите, что это глупая идея, Пирифор тоже делает что-то подобное. Взгляните на Agomo.com

ответ

3

Использование SingalR с правильно спроектированные веб и окна приложений (например, MVP, MVC, и т.д.)

SignalR with window client (WPF)

Console App & SignalR

+0

Существуют другие механизмы публикации/подписки, такие как NServicebus (http://particular.net/NServiceBus), чтобы посмотреть тоже. –

0

Создайте службу WCF в приложении WinForm, укажите конечные точки (и обеспечьте надлежащую защиту конечной точки) и подключитесь к указанным конечным точкам из приложения ASP.NET так же, как и вы подключитесь к службе WCF.

0

Почему вы не просто приложение Winforms использовать стандарт HttpClient или WebRequest для периодического опроса службы (возможно, каждые 5 секунд или около того) и спросить, есть ли там какие-либо задачи, которые необходимо выполнить?

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

Как я бы это сделал, это реализовать его как стек в слое сохранения данных. Таким образом, каждый клиент может иметь строки в таблице, которые добавляются при постановке задачи в очередь. Когда клиенты отправляют HTTP-запрос GET на сервер MVC, он возвращает массив задач для этого клиента, и вы можете сразу удалить их из базы данных или дождаться, когда клиент отправит HTTP-команду позже, чтобы указать, какие задачи, которые он завершил.

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

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

+0

Это то, о чем я думал, но не будет ли проблем с тем, что WinForms отправляет запросы, как каждую минуту? У меня есть 200 загрузок в день в моей программе. Итак, скажем, через год, это будет много программа, запрашивающая мой сервер. Кажется, лучше, чем в реальном времени. – JohnC1

+0

Что вы действительно хотите - это модель публикации/подписки, на что ответил @John S. Опрос также может быть медленным, а также накладывает много накладных расходов. –

Смежные вопросы