【发布时间】:2017-04-14 08:57:21
【问题描述】:
我在我的控制台应用程序中使用 Signalr .Net 客户端从 Signalr Hub 接收消息,这是一个单独的 Web 应用程序。
我的控制台应用程序正确连接到集线器,并且仅从集线器接收消息一次。然后 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 我已经更新了这个问题。我认为问题出在客户端调用方法上。
-
那么,当您保持代码内联时它可以工作,但如果您调用
InvokeMethod方法则不起作用? -
是的。当我使用内联代码时它可以工作
-
看看这个链接,基本上可以不用lamda表达式直接传方法名,例如:
MarcolinMainProxy.On<string>("sendAlert", InvokeMethod);damienbod.com/2013/11/13/…
标签: asp.net-mvc signalr signalr.client signalr.net-client