c# – 具有多个参数的SignalR客户端

我是*的新手,多年来一直是潜伏者,对我作为开发人员的帮助很大.非常感谢.

在第一篇文章和问题结束我的介绍:

场景:

我正在使用SignalR.

我有一个SignalR服务器,它向所有具有6个参数的客户端广播消息.

当我在Web客户端(MVC)中实现它时它工作正常,我可以获得所有这6个参数.

我尝试在Xamarin中实现它.

以下是示例代理段:

proxy.On<string, string, string , string, string, string>("test", (test1, test2, test3, test4, test5, test6) =>
            {
                MyActivity.RunOnUiThread(() =>
                {
                    //my method here
                });
            });

当我有6个参数时,我会收到此错误:

‘IHubProxy’不包含’On’的定义,并且没有扩展方法’On’可以找到接受类型’IHubProxy’的第一个参数(你是否缺少using指令或汇编引用?)

但是当我将参数更改为4时

proxy.On<string, string, string , string>("test", (test1, test2, test3, test4) =>
        {
            MyActivity.RunOnUiThread(() =>
            {
                //my method here
            });
        });

我不会得到错误,我将能够获得这4个参数.但在我的应用程序中,我需要获得所有这6个参数.

为什么每当我有超过4个参数时我都会收到此错误?

我错过了什么吗?

谢谢!

最佳答案:

这只是SignalR .NET客户端代理的限制.它接触开发者有点懒于重写On方法以支持更多Type参数,或者他们只是认为如果你有更多参数,你应该将它们分组在一个类中.
解决方案非常简单,创建一个包含所需数量的类而不是使用参数.就像是:

public class AllParams
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
    public string Prop3 { get; set; }
    public string Prop4 { get; set; }
    public string Prop5 { get; set; }
    public string PropN { get; set; }
}

proxy.On<AllParams>("test", all =>
{
    MyActivity.RunOnUiThread(() =>
    {
        // all.Prop1, all.Prop2, etc...
    });
});

这甚至可以提高您的代码可读性

上一篇:javascript – SignalR服务:根据用户角色获取消息


下一篇:javascript – SignalR Client如何在开始连接时设置用户?