我正在使用C#和SignalR开发实时客户端 - 服务器应用程序.我需要尽快向客户发送消息.我在服务器上的代码:
for (int i = 0; i < totalRecords; i++)
{
hubContext.Clients.Client(clientList[c].Key).addMessage(
serverId, RecordsList[i].type + RecordsList[i].value);
Thread.Sleep(50);
}
Run Code Online (Sandbox Code Playgroud)
如果有延迟> = 50 ms,一切正常,但如果没有延迟或延迟小于50 ms,则会丢失一些消息.我需要尽可能快地发送消息.我想我需要检查是否收到消息,并且只在发送另一个消息之后.
如何以正确的方式做到这一点?
我正在使用SignalR,ASP.NET和C#开发实时客户端 - 服务器应用程序.我使用localhost作为主机和VS2013.
我的问题是:
为什么我关闭服务器,在Web客户端上发生" 重新连接 "事件?
"断开"事件仅在40秒以后发生.如何减少这个时间?
我需要客户端在启动时连接到服务器."重新连接"事件应仅在固定间隔内发生.如果"重新连接"间隔时间结束,则客户端应作为新客户端连接.如何归档这个目标?
最后,我想问一下-如何永葆使用连接SignalR在正确的方式?
我正在使用此代码:
C#
public override Task OnDisconnected()
{
clientList.RemoveAt(nIndex);
Console.WriteLine("Disconnected {0}\n", Context.ConnectionId);
return (base.OnDisconnected());
}
public override Task OnReconnected()
{
Console.WriteLine("Reconnected {0}\n", Context.ConnectionId);
return (base.OnReconnected());
}
Run Code Online (Sandbox Code Playgroud)
使用Javascript
$.connection.hub.reconnected(function () {
// Html encode display name and message.
var encodedName = $('<div />').text("heartbeat").html();
var now = new Date();
// Add the message to the page.
$('#discussion').append('Reconnected to server: ' + …Run Code Online (Sandbox Code Playgroud) 我有一个在SQL Server 2014表中呈现的二叉树:
UserID ParentUserID Position
----------------------------
1 Null Null <-- ROOT
2 1 Left
3 1 Right <-- Last Right for ID=1 (CTE query return 3)
4 2 Left
5 4 Left
6 5 Left
7 6 Left <-- Last Left for ID=1 (CTE query return 6)
Run Code Online (Sandbox Code Playgroud)
要获得最后一个id和最后一个id我正在使用CTE查询:
; with left_hand_recurse as
(
select UserID
, ParentUserID
, 1 as depth
from Table1 where ParentUserID is null
union all
select child.UserID
, child.ParentUserID
, parent.depth + 1
from left_hand_recurse …Run Code Online (Sandbox Code Playgroud) 我开发了几个Microsoft Azure功能.我想使用带防火墙的网关来使我的Azure功能可用并仅使用一个公共IP进行保护.
有没有办法将Azure功能与Azure应用程序网关或API管理一起使用?
在这种情况下,最好的方法是什么?
我需要传递User.Identity.Name给Windows窗体客户端.
方法
public override Task OnConnected() {
string userName = Context.User.Identity.Name;
string connectionId = Context.ConnectionId;
var user = Users.GetOrAdd(userName, _ => new User {
Name = userName,
ConnectionIds = new HashSet<string>()
});
lock (user.ConnectionIds) {
user.ConnectionIds.Add(connectionId);
if (user.ConnectionIds.Count == 1) {
Clients.Others.userConnected(userName);
}
}
return base.OnConnected();
}
Run Code Online (Sandbox Code Playgroud)
但是Context.User.Identity.Name是空的吗?为什么?怎么解决?
我正在使用SignalR开发实时网络应用程序.我有Web和Windows窗体客户端.我使用QueryString使用此javascript将参数"param"从Web App客户端传递到服务器:
$(function () {
//Set the hubs URL for the connection
$.connection.hub.url = "http://localhost:8089/signalr";
// Declare a proxy to reference the hub. Declare queryString param
$.connection.hub.qs = "param" + urlParams['param'];
$.connection.hub.start();
...
Run Code Online (Sandbox Code Playgroud)
在服务器端我正在使用:
public override Task OnConnected()
{
var queryStr = Context.QueryString["param"];
if (queryStr == value )
DoSmth();
else DoSmth2();
}
Run Code Online (Sandbox Code Playgroud)
我需要使用Windows Form App中的QueryString传递参数"param".我需要类似的东西:$.connection.hub.qs = "param" + urlParams['param'];但对于Windows Form应用程序.怎么做?