Вызов концентратора signalr с типом, имеющим производные типы
Привет,
Я сталкиваюсь с проблемой, когда пытаюсь вызвать метод на сервере SignalR из клиента SignalR.
Фон:
Hub.Invoke("MethodToBeCalled", MessageType).Wait();
Тип сообщения определяется следующим образом
public class MessageType { primitive type prop1; primitive type prop2; List<BaseAction> Actions {get;set;} }
BaseAction - это базовый класс для двух производных типов: RunningAction и RowingAction.
Вопрос:
Когда я передаю CLR-объект MessageType в концентратор.Вызовите всю информацию о типе, которая теряется, когда они достигают SignalRHub, поэтому в принципе я не могу отличить RunningAction от RowingAction, потому что сериализация JSON просто рассматривает их все как BaseAction(BaseType).
Может ли кто-нибудь подсказать, есть ли способ обойти эту проблему?
Заранее спасибо:)
Что я уже пробовал:
Я уже пробовал
Hub.JsonSerializer.TypeNameHandling = TypeNameHandling.All;на клиенте перед началом соединения. Но когда я делаю это, он всегда терпит неудачу с сервером 503.
Никаких изменений при попытке сделать то же самое на стороне сервера SignalR(OWIN) :
var myHubJsonSetting = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All }; var serializer = JsonSerializer.Create(myHubJsonSetting); _signalR = WebApp.Start( GetStartupOptions(), builder => { builder.UseCors(CorsOptions.AllowAll); GlobalHost.DependencyResolver.Register(typeof(JsonSerializer), () => serializer); builder.MapSignalR( serviceName, new HubConfiguration { EnableJSONP = false, EnableDetailedErrors = _detailedErrors, EnableJavaScriptProxies = true }); builder.RunSignalR(); });