2
我在控制檯應用程序中使用Signalr .Net Client從Signalr Hub接收消息,這是一個單獨的Web應用程序。Signalr .Net Client Console應用程序只接收來自集線器的消息
我的控制檯應用程序正在正確連接到集線器,並且只接收來自集線器的消息一次。然後,Signalr .Net客戶端中的客戶端方法不會被調用。
一旦我停止了控制檯應用程序並運行它,它又一次從集線器收到一條消息,但沒有任何反應。
這是我基地代碼
public override Task OnConnected()
{
try
{
var cType = Context.QueryString["type"];
var connectionId = Context.ConnectionId;
var connectedUserList = (from d in Users
where d.ClientType == cType
select d).ToList();
if (connectedUserList.Count > 0)
{
var conUser = connectedUserList.First<ConnectedUsers>();
conUser.ConnectionIds.Add(connectionId);
}
else
{
var newUser = new ConnectedUsers
{
ConnectionIds = new HashSet<string> {connectionId}
,
ClientType = cType
};
Users.Add(newUser);
}
}
catch (Exception ex)
{
).Error(ex);
}
return base.OnConnected();
}
和我的.NET客戶端連接
static void Main(string[] args)
{
SignalrHandler();
Console.ReadLine();
}
public static async void SignalrHandler()
{
var url = ConfigurationSettings.AppSettings["Url"] ?? @"http://localhost:1010/";
var querystringData = new Dictionary<string, string> { { "type", "WIN" } };
_hubConnection = new HubConnection(url, querystringData);
MarcolinMainProxy = _hubConnection.CreateHubProxy("MainHub");
MarcolinMainProxy.On<string>("sendAlert", type => InvokeMethod(type));
await _hubConnection.Start();
}
客戶方法
private static void InvokeMethod(string type)
{
Console.WriteLine(String.Format("Recieved Message From Server On :{0}",System.DateTime.Now.ToString()));
Console.WriteLine("Message Received");
Console.ReadLine();
}
而且這發生在我使用Invoke方法與以下行
MarcolinMainProxy.On<string>("sendAlert", type => InvokeMethod(type));
當我使用下面的行它的工作原理..
MarcolinMainProxy.On<string>("sendAlert", stock => Console.WriteLine("Symbol {0} Price {1}", "sd", "sdde"));
認沽調用'SignalrHandler'後的調試消息看看代碼的執行是否通過它,也許它不會阻塞並等待新消息,所以代碼首次聽,並在此之後,應用程序結束 –
@HaithamShaddad我已經更新了這個問題。我認爲問題在於客戶端調用方法。 – tarzanbappa
所以,它在你保持內聯代碼的情況下工作,但如果你調用'InvokeMethod'方法則不起作用? –