SignalR +将自定义对象从服务器传递到客户端无法正常工作

时间:2014-01-18 18:09:29

标签: c# signalr

我正在尝试将自定义对象从自托管信号器中心服务器传递到所有客户端,客户端方法没有被调用。但是如果相同的自定义类对象从客户端传递到服务器工作正常,这意味着它调用服务器方法。

下面是示例代码:

public class ChatHub : Hub
{
    public void Send(DataContract message)
    {
        //below call not reaching to client while passing custom obj
        Clients.All.SendMessage(message);  
        //below string passing works - means invokes client method
        Clients.All.SendMsg("test");         
    }       
}      

通过dll在客户端和服务器项目中定义的自定义类:

public class DataContract
{
    public string Name
    {
        get;set;
    }

    public int Id
    {
        get;set;
    }
}

客户端方法:

public class SignalRClient
{
    HubConnection hubConnection = null;
    IHubProxy chat;       

    public SignalRClient()
    {
        hubConnection = new HubConnection("https://localhost/");
        chat = hubConnection.CreateHubProxy("ChatHub");
    }
    public void StartConnection()
    {
        if (hubConnection != null)
        {
            hubConnection.Start().Wait();
        }           

        chat.On<DataContract>("SendMessage", (stock) => 
            {
                Console.WriteLine("name {0} id {1}", stock.Name, stock.Id.ToString());
            });

          chat.On<string>("SendMsg", (message) =>
        {
            Console.WriteLine(message);
        });
     }

    public void SendMessage(DataContract dd)
    {
          dd.Name = "test";
          chat.Invoke("Send", dd).Wait();
    }

    public void SendMessage(string msg)
    {
          chat.Invoke("SendMsg", "Console app", msg).Wait();
    }
}

// Program.cs中

main()
{
     SignalRClient client = new SignalRClient();
     client.StartConnection();

     string msg = null;
     while ((msg = Console.ReadLine()) != null)
     {
          DataContract dd = new DataContract { Name = "arun", Id = 9 };  
          //below calls reaches to server both string type and custome obj                     
          client.SendMessage(dd);  
          client.SendMessage("client");           
     }
}

当param是自定义对象时,从服务器调用时(即Clients.All.SendMessage(message);)没有调用客户端方法的任何线索。

提前致谢。

0 个答案:

没有答案