4

我将 SignalR 1.1 与 .NET 客户端一起使用。我的集线器中有一个方法,它接受 BaseMessage 类的对象并将其广播给所有客户端:

public void SendMessage(BaseMessage message)
{
    Clients.All.BroadCastMessage(message);
}

客户端将派生消息传递给此方法:

_hub.Invoke("SendMessage", new ErrorMessage("Some Error")).Wait();

客户端有一个消息处理程序:

_hub.On<BaseMessage>("BroadCastMessage", OnMessageReceived);

我在应用程序启动时指定了 TypeNameHandling.All 序列化程序设置:

var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All};
var serializer = new JsonNetSerializer(settings);
GlobalHost.DependencyResolver.Register(typeof(IJsonSerializer), () => serializer);

但是当客户端发送派生消息时,服务器会收到基本消息。

我应该如何配置序列化程序才能接收派生消息?

注意:我可以手动进行序列化/反序列化并将字符串传递给服务器,但这会导致双重序列化。

4

1 回答 1

2

SignalR 不支持此方案,因为它需要您的 JSON 有效负载包含有关派生类型和程序集的信息。请参阅此示例。在您的有效负载中添加类型信息不会很好地与浏览器配合使用。我建议您创建单独的集线器方法来处理您的每个派生类型。

于 2013-05-21T21:44:18.443 回答