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

时间:2016-02-26 00:31:32

标签: c# signalr invoke

我想将.net客户端(Xamarin Android)中的参数传递给中心服务器。 我通过方法“invoke”

在serverHub中调用server方法

HubServer代码:

public class ConversationHub : Hub{

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

我的实体

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

我希望通过调用方法“调用”从.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;

}     }

客户.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

但它 -

chatHubProxy.Invoke("SendChatMessage", 3, 0, "Hello world!", false, myObj);

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

此外,我在js:

中的UI中使用此serverHub方法(sendChatmessage)
myHub.conversationHub.server.sendChatMessage(data.conversationId, data.messageId, data.messageText, data.isChat, JSON.parse(link));

链接表示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

解决方案:

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

chatHubProxy.Invoke("SendChatMessage", myObj, 3, 0, "Hello world!", false);//firstly objects 

之后,我在UI和Hub方法中更改了相应的顺序参数。并且所有代码都很好 - )

0 个答案:

没有答案