2013-12-22 2 views
2

У меня есть приложение WPF, которое будет развернуто для нескольких пользователей в локальной сети. Пользователи этого приложения будут заводскими рабочими в производственной компании, которые будут использовать приложение для обновления своих результатов по каждому заказу.SignalR - использование перекрестных приложений

У клиента также есть приложение ASP.NET для веб-форм, которое используется для ввода заказов между прочим. То, что я хочу создать в этом приложении ASP.NET, - это экран, который даст живые обновления прогресса рабочих завода. Я смотрел на SignalR для этого, но я не уверен, разрешит ли я отправлять обновления из отдельного приложения (I.e WPF в приложение WebForms). Это возможно? Если да, то есть примеры использования Cross SignalR в Интернете?

Спасибо!

ответ

1

Если приложения WPF и WebForms подключены к одному и тому же серверу, тогда это просто реализовать.

настроить SignalR Hub:

public class ProgressHub : Hub { 

} 

При загрузке нагрузки WebForms приложение/показать текущий прогресс в обычном порядке. Настройка SignalR, чтобы получить живые обновления к прогрессу:

var appHubProxy = $.connection.appHub; 
appHubProxy.client.progress = function (orderId, percent) { 
    console.log(orderId + ': ' + percent); 
}; 
$.connection.hub.start() 

приложение WPF вызывает сервер для обновления прогресса (используя, например, WebAPI), в этом обработчике называют signalr клиентов прогресса метод:

public class ProgressController : ApiController { 
    public void Post(string orderId, int percent) { 
     // <Save progress to DB, etc> 

     // Get instance of the SignalR ProgressHub context 
     var hubContext = GlobalHost.ConnectionManager.GetHubContext<ProgressHub>(); 

     // Invoke the progress method on all connected clients. 
     // You probably want to use Groups to only send customers 
     // events for its own orders 
     hubContext.Clients.All.progress(orderId, percent); 
    } 
} 

Или вы могли бы использовать WPF API .NET SignalR вызвать метод в концентратор вместо:

public class ProgressHub : Hub { 
    public void Progress(string orderId, int percent) { 
     // <Save progress to DB, etc> 

     // Invoke the progress method on all connected clients. 
     // You probably want to use Groups to only send customers 
     // events for its own orders 
     Clients.All.progress(orderId, percent); 
    } 
} 
+0

Отлично, спасибо! Так будет ли концентратор находиться в веб-приложении или в проекте WPF? – Chris

+0

центр будет на сервере –

1

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

См http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-net-client

Вы можете использовать это в сочетании с клиентами JavaScript веб-страниц без проблем.

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