c# - 客户端未收到 SignalR 消息

标签 c# wpf wcf signalr

我一直在尝试让我的 WPF 客户端应用程序接收 WCF 服务发送的 SignalR 消息。我已经尝试了很多东西,现在求助于黑客攻击,希望能有所作为。我已经按照在线教程和示例进行操作,但我根本无法调用我的 WPF OnSignalRMessage() 方法。 我哪里出错了?

我的中心:

public class PrestoHub : Hub
{
    public void Send(string message)
    {
        Clients.All.OnSignalRMessage(message);
    }
}

我的创业类:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var config = new HubConfiguration { EnableCrossDomain = true };

        app.MapHubs("http://localhost:8084", config);
    }
}

启动我的 SignalR 主机的方法(在我的 WCF 服务主机中):

    private void StartSignalRHost()
    {
        const string url = "http://localhost:8084";
        WebApplication.Start<Startup>(url);
    }

实际发送消息的代码:

GlobalHost.ConnectionManager.GetHubContext<PrestoHub>().Clients.All.OnSignalRMessage("snuh");
Console.WriteLine("Sent 'snuh' to all clients...");

我的 WPF 客户端方法:

    private void InitializeSignalR()
    {
        var hubConnection = new Connection("http://localhost:8084");
        hubConnection.Start();
        hubConnection.Received += OnSignalRMessage;
    }

    private void OnSignalRMessage(string data)
    {
        MessageBox.Show(data);
    }

最佳答案

虽然我仍在努力理解如何以及为什么,但我能够让它发挥作用。 +1 感谢 N. Taylor Mullen 为我指明了正确的方向。除了他在客户端的建议之外,我还必须更改一些服务器代码,即使用空集线器和简化的 Startup 类。

我的中心:

public class PrestoHub : Hub{}

注意:hub 是空的,因为我们没有在其中调用方法。正如我们稍后将看到的,我们获取了中心上下文并将消息发送到客户端。

我的创业类:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.MapHubs();
    }
}

上面的代码似乎解决了这个问题。这也有效:

var config = new HubConfiguration { EnableCrossDomain = true };
app.MapHubs(config);

但是一旦我指定了一个 URL,我的客户端就收不到消息(尝试使用和不使用“SignalR”部分):

app.MapHubs("http://localhost:8084/SignalR", config);

启动我的 SignalR 主机的方法(在我的 WCF 服务主机中):

private void StartSignalRHost()
{
    const string url = "http://localhost:8084";
    WebApplication.Start<Startup>(url);
}

实际发送一些消息的代码:

var hubContext = GlobalHost.ConnectionManager.GetHubContext<PrestoHub>();
hubContext.Clients.All.OnSignalRMessage("snuh");

我的 WPF 客户端方法:

private void InitializeSignalR()
{
    var hubConnection = new HubConnection("http://localhost:8084");
    var prestoHubProxy = hubConnection.CreateHubProxy("PrestoHub");
    prestoHubProxy.On<string>("OnSignalRMessage", (data) =>
        {
            MessageBox.Show(data);
        });
    hubConnection.Start();
}

关于c# - 客户端未收到 SignalR 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16753482/

相关文章:

c# - 在 HttpWebResponse C# 上访问 ASP.NET_SessionId

c# - 如何使现有的公共(public) API 可供使用它的外部程序员测试?

c# - 如何创建具有只能具有特定值的属性的对象

wcf - 跟踪对 WCF 服务进行的所有调用(及其堆栈)

wcf - 如何使用 Windows 凭据将 WCF 服务重定向到 HTTPS 端点

c# - IIS APPPOOL\MyAppPool 无法登录到我的 SQL Server 数据库

c# - C#中读取TCP端口

c# - WPF 应用程序无法在某些 PC 上运行

WPF 根据绑定(bind)的文本框内容更改更改标签的显示

c# - 表单设计器和命名空间