【问题标题】:Send/Receive complex object on SignalR在 SignalR 上发送/接收复杂对象
【发布时间】:2014-07-09 20:59:12
【问题描述】:

我正在尝试将复杂对象从服务器传递到客户端。我的 client 代码如下所示:

var hubConnection = new HubConnection("http://somewebsite.com/");
var serverHub = hubConnection.CreateHubProxy("searchHub");

serverHub.On<Complex>("newSearch",
    obj =>
    {
        Console.WriteLine(obj.ToString());
    });

Complex 类是:

public class Complex
{
    public string url { get; set; }
    public string title { get; set; }
    public int results { get; set; }
    public DateTime date { get; set; }
}

在服务器上,我使用:

public class SearchHub: Hub
{
    public static void NewSearch(string url, string title, int results)
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<StatsHub>();

        title = Encoder.HtmlEncode(title);
        url = Encoder.UrlEncode(url);
        var date = DateTime.UtcNow;
        context.Clients.All.newSearch(url, title, results, date);
    }
}

但它不起作用。如果我从On&lt;Complex&gt;("newSearch" 中删除类型并像.On("newSearch" 一样使用它,我会得到连接,但它只打印第一个参数(url)。我应该如何从服务器传递一个复杂的对象?

【问题讨论】:

    标签: c# .net signalr


    【解决方案1】:

    您在服务器上调用newSearch 并使用原始类型作为参数,而不是您的类的实例。更改客户端或服务器上的签名。他们需要匹配

    【讨论】:

    • 谢谢。如何在客户端上更改它?
    • "serverHub.On((url ,title..) => {})"
    • 非常感谢。这解决了问题。我在没有向模板添加类型的情况下尝试了这个,但它没有用。没想到这个。
    • 您也可以发送引用类型,但您需要在服务器上实例化一个引用并发送它而不是您使用的原始类型
    【解决方案2】:

    希望这会对某人有所帮助,这是一个基本的实现。

    【讨论】:

    • 你应该直接将代码复制到帖子中,而不是图像。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多