signalR如何从.net客户端调用服务器方法

Igo*_*kiy 5 c# invoke signalr

我想将参数从.net客户端(Xamarin Android)传递到中心服务器。我通过方法“调用”在serverHub中调用服务器方法

HubServer代码:

public class ConversationHub : Hub{

public void SendChatMessage(int conversationId, int messageId, string messageText, bool isChat, LinkViewModel link)
// logic in the method
    }
}
Run Code Online (Sandbox Code Playgroud)

我的实体

public class Message: Entity<int>
{
        public string Url { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public string ImgUrl { get; set; }
        public virtual DetailMessage DetailMessage {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我想通过调用方法“ invoke”从.Net客户端传递到serverHub的对象(模型)。

public class  LinkViewModel
    {
        public string Url { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public string ImgUrl { get; set; }

        public LinkViewModel(){}
        public LinkViewModel(Message message){
           Url = message.Url;
           Title = message.Title;
           Description  = message.Description;
           ImgUrl = message.ImgUrl;
Run Code Online (Sandbox Code Playgroud)

}}

客户端.Net代码(Xamarin Android):

var hubConnection = new HubConnection(hubUrl);
 var chatHubProxy = hubConnection.CreateHubProxy("ConversationHub");
 chatHubProxy.Invoke("SendChatMessage", 3, 0, "Hello world!", false, myObj); // I want to call method from HubConversation
Run Code Online (Sandbox Code Playgroud)

但它 -

chatHubProxy.Invoke("SendChatMessage", 3, 0, "Hello world!", false, myObj);
Run Code Online (Sandbox Code Playgroud)

不起作用,因为signalR不想传递复杂的对象。如果我从客户端和服务器上的方法中删除参数“ myObj”。方法调用将成功进行。如何使用对象参数调用方法“调用”?

我也从js中的UI使用此serverHub方法(sendChatmessage):

myHub.conversationHub.server.sendChatMessage(data.conversationId, data.messageId, data.messageText, data.isChat, JSON.parse(link));
Run Code Online (Sandbox Code Playgroud)

链接表示UI中的LinkViewModel。JS中的sendChatMessage调用方法可以正常工作,但是.Net客户端存在问题。如何解决这个问题。

更新:

我也尝试将myObj转换为Json(但不起作用):

string jsonObject = JsonConvert.SerializeObject(myObj);// serialization myObj
var hubConnection = new HubConnection(hubUrl);
var chatHubProxy = hubConnection.CreateHubProxy("ConversationHub");
     chatHubProxy.Invoke("SendChatMessage", 3, 0, "Hello world!", false, jsonObject); //pass object as json string, but it doesn't work
Run Code Online (Sandbox Code Playgroud)

解:

我解决了这个问题。当我从.Net客户端调用方法“调用”时,第一个参数应该是对象,然后是基元,仅按此顺序(例如,在我的情况下):

chatHubProxy.Invoke("SendChatMessage", myObj, 3, 0, "Hello world!", false);//firstly objects 
Run Code Online (Sandbox Code Playgroud)

之后,我在UI和Hub方法中更改了相应的顺序参数。并且所有代码都可以正常工作-)