2013-05-19 3 views
2

.NET 클라이언트에서 SignalR 1.1을 사용하고 있습니다. 나는 BaseMessage 클래스의 객체를 받아 모든 클라이언트에 방송 내 허브에서 하나의 방법이있다 : 클라이언트가있다SignalR에서 파생 객체 직렬화/역 직렬화

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

:이 방법으로 파생 된 메시지를 전달합니다

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

클라이언트 하나의 메시지 핸들러 :

_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); 

그러나 클라이언트가 파생 메시지를 보내면 서버는 기본 메시지를받습니다.

파생 메시지를 수신하려면 serializer를 어떻게 구성해야합니까?

참고 : 직렬화/직렬화를 수동으로 수행하고 문자열을 서버에 전달할 수 있지만 이중 직렬화가 발생합니다.

답변

0

SignalR은 JSON 페이로드에 파생 유형 및 어셈블리에 대한 정보를 포함해야하므로이 시나리오를 지원하지 않습니다. 이 sample을 참조하십시오. 페이로드에 유형 정보를 추가하면 브라우저에서 제대로 재생되지 않습니다. 파생 된 각 유형을 처리 할 수있는 개별 허브 메서드를 만드는 것이 좋습니다.