我一直致力于将signalr作为wcf服务的一部分来与.net客户端进行通信。除了形成连接消息之外,所有通信都是将动态有效负载传递到客户端的一种方式。
我已设法将其设置为客户端将连接到服务并传递连接消息,但我无法将消息从服务推送到客户端。
很抱歉,如果我错过了其他的答案,但我一直无法找到失败的原因,因为它似乎遵循“怎么样”
非常感谢任何帮助,并提前感谢您
服务器端:
WCF外部呼叫
public class MessageService : IMessageService
{
public string PushAlerts()
{
var payLoad = new PayLoad
{
MethodName = "alerts"
};
IHubContext connectionHub = GlobalHost.ConnectionManager.GetHubContext<PushConnection>();
connectionHub.Clients.All.Notify(payLoad);
}
}
我的中心
[HubName("PushHub")]
public class PushHub : Hub
{
public override Task OnConnected()
{
var connectionMessage = Context.QueryString["CONNECTION MESSAGE"];
if (connectionMessage != null)
{
Debug.WriteLine("connectionMessage");
}
return base.OnConnected();
}
}
客户机侧:
var querystringData = new Dictionary<string, string>{};
querystringData.Add("CONNECTION MESSAGE", "foo Connection");
var hubConnection = new HubConnection("http://localhost:60479/", querystringData); //Running local till working
hubConnection.TraceLevel = TraceLevels.All;
hubConnection.TraceWriter = Console.Out;
IHubProxy clientHubProxy = hubConnection.CreateHubProxy("PushHub");
clientHubProxy.On("Notify", payLoad =>
SynchronizationContext.Current.Post(delegate
{
ResponseMethod(payLoad);
}, null)
);
await hubConnection.Start();
我错过了有效载荷,但目前只保留一个字符串值。我还设置了一个用于记录目标的管道模块。
再次感谢
答案 0 :(得分:0)
好的,所以我以两种方式解决了这个问题。首先,我将调用移动到集线器内部的客户端,然后我从我的wcf服务中的方法调用。
[HubName("PushHub")]
public class PushHub : Hub
{
IHubContext connectionHub = GlobalHost.ConnectionManager.GetHubContext<PushConnection>();
public void Send(Payload payload)
{
connectionHub.Clients.All.Notify(payLoad);
}
}
其次,该方法的客户端代码都是错误的。最终这有效:
clientHubProxy.On("Notify", (payLoad) => { dostuff };
采取了很多摆弄,但希望我的回答有助于其他人。