2016-01-18 1 views
3

привет, у меня есть два приложения signalR, и мне нужно позвонить Метод концентратора или метод клиентской стороны в приложении SignalR app1 из приложения SignalR2, я используя GlobalHost.ConnectionManager.GetHubContext для доступа ChatHubIn который присутствует SignalR2 приложение:как вызвать концентратор или клиентский метод в одном сигнале R app1 из другого одного сигнала R app2

public class ChatHub : Hub 
{ 
    public void SendToOtherApp(string name, string message, string Id) 
    {   
     var context = GlobalHost.ConnectionManager.GetHubContext("ChatHubIn"); 
     context.Clients.All.addNewMessageToPage(name,message);  
    } 
} 

, но я получаю ошибку ChatHubIn концентратор не может быть решена что такое это ?? почему это происходит? любым способом решить эту проблему или любым другим способом вызвать метод Hub или Client из другого приложения. Отредактировано:

public class ChatHubIn : Hub 
{ 
    public void SendToSameApp(string name, string message, string Id) //, string c_id 
    { 
     Clients.All.addNewMessageToPage(name, message); 
    } 
} 

см у меня есть два отдельных приложенийSignalR1 приложение, SignalR2 приложение, как я сказал, и каждое тело знает два приложения Willl имеет два отдельных клиента, узловые части здесь мне нужно позвоните в ChatHubIn Hub, присутствующий в приложении SignalR2, от узла-концентратора приложения SignalR1, и оттуда мне нужно отправить сообщения всем клиентам в приложении SignalR2.

+0

Очень трудно понять проблему, только один метод ... Что такое «ChatHubIn»? Также лучшим сценарием для этого будет сигнал хозяина-хозяина и подключить два приложения. –

+0

hey thnx для ответа, а «ChatHubIn» - это концентратор, который присутствует в приложении SignalR2, и этот код принадлежит к SignalR1 app HUb, и я пытаюсь вызвать «ChatHubIn». – Ray

+0

Извините, если явно, но делает ли приложение Signalr1 и, соответственно, «Приложение Signal2», относятся к фактическим различным версиям signalr? Или это просто вы их называете? – rdoubleui

ответ

0

Вам необходимо предоставить более подробную информацию о том, какой код используется, чтобы помочь решить проблему Эта проблема.

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

Edit на вопрос редактирования: Просто еще одна вещь, что привлекло мое внимание: на основе Infos указано, что имя концентратора не может быть решена: попытаться решить ступицу с помощью вызова

var context = GlobalHost.ConnectionManager.GetHubContext<ChatHubIn>(); 

к отлаживать возможные проблемы с именами, которые могут возникнуть при разрешении хаба по имени.

Я все еще сомневаюсь, что вы можете получить hub context над границами процесса. Если это невозможно, то самый чистый подход будет заключаться в том, чтобы на хаб действовать дополнительно как hub client на другой концентратор, который предоставляет специализированный метод для получения уведомления, а затем передает его своим клиентам.

+0

Не совсем в том же процессе. Самостоятельный хостинг кажется подходящим с учетом требований. –

+0

Значит, вы имеете в виду самообслуживание (если оно), должно быть достаточно, чтобы завладеть «контекстом»? – rdoubleui

+0

Я предполагаю, что это не самообслуживание, а не много деталей в Q. Ни один из моих комментариев недействителен, если не будет предоставлен больше кода. –

1

Я не могу дать вам точный ответ на вашу проблему, потому что короткий фрагмент кода и объяснение меньше, чем информативный, но то, что я сделал, воспроизводит все решение, в котором у меня не было проблем.

Просто чтобы прояснить вопрос:

see i have two separate applications SignalR1 app, SignalR2 app as i told and every body knows two apps willl have two separate client , hub parts here i need to call ChatHubIn Hub present in SignalR2 app from Hub part of SignalR1 app and from there i need to send messages to all clients in SignalR2 app

Это трудно переварить выше, так что я сделал это создать два проекта; один веб-форму (SignalR1, который по существу сервер/хост) и один MVC (SignalR2 клиент)

enter image description here

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

В рамках проекта MVC я установил клиент SignalR JS и SignalR.Net клиент, дающий мне возможность подключиться к хосту.

Большинство Важно установить/включить Корс, который должен быть установлен на хосте: Microsoft.AspNet.Cors Install-Package -Version 5.2.3

Разрешение CORS в классе запуска:

public void Configuration(IAppBuilder app) 
{ 
    app.Map("/signalr", map => 
    { 

     map.UseCors(CorsOptions.AllowAll); 
     var hubConfiguration = new HubConfiguration 
     { 
      EnableJSONP = true 
     }; 
     map.RunSignalR(hubConfiguration); 
    }); 
} 

может не только проект MVC получать сообщения, теперь у меня есть возможность вести огонь метод на Хаб

Conn выполнения над каждым к хозяину:

<script src="~/Scripts/jquery-1.6.4.js"></script> 
<script src="~/Scripts/jquery.signalR-2.2.0.js"></script> 
<script src="http://localhost:45569/signalr/hubs"></script> 
<script> 
    $(document).ready(function() { 
     var chatHub = $.connection.chatHub; 
     $.connection.hub.url = "http://localhost:45569/signalr"; 
     // Declare a function on the chat hub so the server can invoke it   
     // Create a function that the hub can call to broadcast messages. 
     chatHub.client.broadcastMessage = function (name, message) { 
      // Html encode display name and message. 
      var encodedName = $('<div />').text(name).html(); 
      var encodedMsg = $('<div />').text(message).html(); 
      // Add the message to the page. 
      $('#discussion').append('<li><strong>' + encodedName 
       + '</strong>:&nbsp;&nbsp;' + encodedMsg + '</li>'); 
     }; 
     $.connection.hub.start(function() { 
      //We can also fire back :-) Happy days 
     }); 
    }); 
</script> 

Мы можем сделать это в C# тоже !:

var hubConnection = new HubConnection("http://localhost:45569/"); 
    IHubProxy chatHubProxy = hubConnection.CreateHubProxy("chatHub"); 
    hubConnection.Start().Wait(); 
    chatHubProxy .Invoke("Send", "name", "message"); 

Теперь, если я установить полный пакет SignalR на MVC, я мог бы назвать свой хаб позвонить другому:

public class OtherChatHub : Hub 
{ 
    public void Send(string name, string message) 
    {   
     var hubConnection = new HubConnection("http://localhost:45569/"); 
     IHubProxy chatHubProxy = hubConnection.CreateHubProxy("chatHub"); 
     hubConnection.Start().Wait(); 
     chatHubProxy .Invoke("Send", "name", "message");  
    } 
} 

// EDIT

Благодаря уровню требуется код, чтобы получить минимальную рабочую нагрузку слишком много для этого Q. Поэтому я решил добавить в GitHub для загрузки и узнать не просто использовать точный код.

SignalRTwoWay-GitHub

+0

hey thnx, можно уложить полный код в деталях, потому что я новичок в этом сигнале R, пожалуйста ........ – Ray

+0

@saaduu, я разобрался позже сегодня. –

+0

@ Tez Wingfield - спасибо и я дожидаюсь этого ...... – Ray