2010-08-03 5 views
3

Я разработал приложение для веб-приложений и Windows, как в C# .NET. Теперь то, что я хотел бы сделать, - это когда кнопка нажата на конкретную страницу в веб-приложении, сигнал должен быть отправлен в приложение Windows, когда ссылка была нажата. Как я мог сделать это очень легко? Я хотел бы держаться подальше от программирования сокетов ...Как я могу подключить мое веб-приложение к моему настольному приложению?

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

ответ

1

Приложение для настольных компьютеров может опросить веб-приложение через обычный http, но наличие открытого соединения, вероятно, будет лучше. Вы также можете использовать что-то вроде удаленной работы .NET или WCF, чтобы включить связь типа IPC.

Вы также можете проверить Именованные трубы для IPC.

0

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

Но это может налагать риски безопасности. Кроме того, маршрутизаторы или брандмауэры могут блокировать доступ к клиентам. Возможно, лучше использовать опрос, то есть настольный клиент периодически запрашивает сервер для новых событий. Для этого достаточно простого REST-API, хотя здесь можно было бы использовать удаленное взаимодействие .NET (а также SOAP или CORBA).

0

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

2

Простой веб-сервис должен делать трюк. Просто создайте службу в ASP.NET и добавьте ее в качестве ссылки на ваше настольное приложение. Не нужно перегружать, чтобы выполнить такую ​​простую задачу.

Вы можете использовать WCF или Remoting или Sockets - почему тратить время, когда кривая обучения намного выше? Создание веб-службы совсем не займет времени и должно предоставить вам всю необходимую функциональность.

Вот краткое пошаговое руководство, которое поможет вам начать работу.

  1. В Visual Studio создайте новый веб-сайт и выберите веб-службу ASP.NET.
  2. Будет создан метод заглушки под названием HelloWorld, например.

    [WebMethod]

    общественная строка HelloWorld() {

    return "Hello World"; 
    

    }

  3. запустить свой сайт.

  4. Перейти к описанию вашего рабочего стола.
  5. Под вашим обозревателе решений щелкните правой кнопкой мыши на проекте и выберите Add Web Reference
  6. Введите адрес, где вы запустили веб-службы и нажмите кнопку Go **
  7. После того, как Ваша ссылка будет найдена, переименовать его в чем-то и нажмите «Добавить ссылку».
  8. Теперь вы можете получить доступ к методам, предоставляемым веб-службой, как к локальным объектам. Теперь вы сможете увидеть метод HelloWorld, открытый службой.

** Помните, что для того, чтобы у вас была веб-ссылка со статическим URL-адресом, вам необходимо разместить ссылку в IIS. Когда Visual Studio запускает вашу службу из среды IDE, она создаст временный URL-адрес и порт, который будет изменен при последующих запусках. Это просто показать вам, как просто работать с веб-службами.

Вы можете добавить свои собственные методы и вернуть типы в том же классе, что и метод HelloWorld, добавив флаг [WebMethod] над вашими методами. Если вы что-то измените в своем сервисе, вернитесь в свое настольное приложение, щелкните правой кнопкой мыши службу и нажмите «Обновить».

+0

Привет, не могли бы вы дать мне более подробную информацию о том, как я мог добиться этого с помощью веб-службы? Конечно звучит как привлекательная идея ... – Romulus

0

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

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

0

Как всегда, существует более чем один способ кожи кошки. Вот мое занятие.

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

щелчок может просто проявляющие себя как событие в «командной шине» (читайте: event aggregator). Элементы в командной строке отображаются через веб-службу. настольное приложение затем может просто «наблюдать» командную шину, опросив веб-службу, если есть новая «команда», которую она не увидела раньше.

Потенциально используя Reactive Extension для .Net может помочь здесь. Веб предоставляет IObservable и настольный клиент становится IObserver

если вам нужен более мгновенного отклик, но только ограниченное количество настольных клиентов, и каждый клиент имеет постоянный IP-адрес

хост службу WCF в клиент рабочего стола. Привяжите это, используя net tcp против вашего общедоступного IP-адреса (например, net.tcp: //xxx.xxx.xxx.xxx: 8523/Service1). Когда пользователь нажимает кнопку на веб-сайте, веб-сайт отправляет запрос на службу wcf, которая размещается в вашем рабочем столе. детали этого довольно размыты ко мне, но похоже на логический подход.

если вам нужен более мгновенный отклик, но только ограниченное число настольных клиентов, и каждый клиент не имеют постоянные IP-адреса, и готов платить за облачный сервис Вот где Azure Service Bus может прийти в удобном виде. Каждый раз, когда пользователь нажимает на ссылку, сообщение нажимается на служебную шину Azure. Каждый из настольных клиентов может подписаться на события в Azure Service Bus. Вот пример Azure service

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