信号器连接但不推送消息

时间:2014-07-11 18:31:33

标签: c# asp.net .net wcf signalr

我一直致力于将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();

我错过了有效载荷,但目前只保留一个字符串值。我还设置了一个用于记录目标的管道模块。

再次感谢

1 个答案:

答案 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 };

采取了很多摆弄,但希望我的回答有助于其他人。