我想将参数从.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方法中更改了相应的顺序参数。并且所有代码都可以正常工作-)
| 归档时间: |
|
| 查看次数: |
3961 次 |
| 最近记录: |