2017-03-07 2 views
1

내 서버 응용 프로그램에서 servicestack을 사용하고 있습니다. 이 서비스를 시작하는 코드입니다 : 하트 비트가 작동하지 않는 순간하트 비트 설명

   clientEvents = new ServerEventsClient(string.Format("http://{0}:{1}/", sIP, 20001), "messages"); 
      client = (IServiceClient)(clientEvents.ServiceClient); 

      clientEvents.Resolver = resolver; 
      clientEvents.RegisterReceiver<GlobalReceiver>(); 
      clientEvents.OnConnect = (e) => 
      { 
       var msg = JsonObject.Parse(e.Json); 
       ConnectionInfo = new ServerEventConnect 
       { 
        HeartbeatIntervalMs = DefaultHeartbeatMs, 
        IdleTimeoutMs = DefaultIdleTimeoutMs, 
       }.Populate(e, msg); 

       ConnectionInfo.Id = msg.Get("id"); 
       ConnectionInfo.HeartbeatUrl = msg.Get("heartbeatUrl"); 
       ConnectionInfo.HeartbeatIntervalMs = msg.Get<long>("heartbeatIntervalMs"); 
       ConnectionInfo.IdleTimeoutMs = msg.Get<long>("idleTimeoutMs"); 
       ConnectionInfo.UnRegisterUrl = msg.Get("unRegisterUrl"); 
       ConnectionInfo.UserId = msg.Get("userId"); 
       ConnectionInfo.DisplayName = msg.Get("displayName"); 
       ConnectionInfo.ProfileUrl = msg.Get("profileUrl"); 


      }; 

,하지만 난 내가 뭔가를 놓친 확신 :

 public override void Configure(Container container) 
    { 
     LogManager.LogFactory = new KCServiceObjects.ServiceLoggerFactory(); 
     ServiceStack.Text.JsConfig.EmitCamelCaseNames = true; 

     Plugins.Add(new ServerEventsFeature() 
     { 
      HeartbeatInterval = TimeSpan.FromSeconds(60), 
      NotifyChannelOfSubscriptions = true, 

     }); 
     Plugins.Add(new ValidationFeature()); 

     container.Register<IServerEvents>(c => new MemoryServerEvents()); 
     notifier = new FrontendMessages(container.Resolve<IServerEvents>(), broker); 
     container.Register(c => notifier); 
     container.Register<IWebServiceEventManager>(c => 
        new WebServiceEventManager(broker)); 

     SetConfig(new HostConfig 
     { 
      DebugMode = true, 
      DefaultContentType = MimeTypes.Json, 
      EnableFeatures = Feature.All.Remove(Feature.Html), 
      GlobalResponseHeaders = 
      { 
       { "Access-Control-Allow-Origin", "*" }, 
       { "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE" }, 
       { "Access-Control-Allow-Headers", "Content-Type" }, 
      }, 
     }); 
    } 

이 .NET 클라이언트입니다 내 코드. 로그를 보면 서버는 STOP()을 보낸 다음 START()를 보냅니다. 어떻게 C#으로 구현해야합니까? 클라이언트가 n 초마다 서버에 메시지를 보내야합니까? 모든 레오나르도

답변

2

몇 가지에

감사합니다 : 당신이 간격을 변경하려면

, 당신은 또한 IDLETIMEOUT을 변경해야합니다, 예를 들면 :

Plugins.Add(new ServerEventsFeature { 
    HeartbeatInterval = TimeSpan.FromSeconds(60), 
    IdleTimeout = TimeSpan.FromSeconds(180), 
}); 

당신은하지 않습니다 NotifyChannelOfSubscriptions = true으로 설정해야합니다. 기본값입니다. 당신이 OnConnect 핸들러에서하고있는 것처럼

//container.Register<IServerEvents>(c => new MemoryServerEvents()); 

잘못 할 경우는 동작을 중단 할 수는 ConnectionInfo 직접 채울 절대로 : 당신은 MemoryServerEvents를 등록 할 필요가 없습니다

, 그것은 기본입니다.

Plugins.Add(new CorsFeature()); 
+1

감사 대신 CORS GlobalResponseHeaders를 추가

, 그냥 CorsFeature 플러그인, 예컨대을 등록합니다. 지금 하트 비트가 작동 중입니다! –