我在.NET客户端使用SignalR 1.1。 我的集线器中有一个方法接受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);
但是当客户端发送派生消息时,服务器会收到一条基本消息。
如何配置序列化程序以便能够接收派生消息?
注意:我可以手动执行序列化/反序列化并将字符串传递给服务器,但这会导致双序列化。
答案 0 :(得分:0)
SignalR不支持此方案,因为它需要您的JSON有效内容包含有关派生类型和程序集的信息。见sample。 在您的有效负载中添加类型信息不适合浏览器。我建议您创建单独的集线器方法来处理每个派生类型。