JSクライアントにサーバー送信イベントを使用してメッセージを送信しようとしています。クライアントは、6回目または7回目のイベントごとに取得します。私は間違って何をしていますか?IServerEvents.NotifyChannelを使用しているイベントがありません
行動は、単純なスタンドアロンのサンプル使用して再現することができます。
using System;
using System.Threading;
using Funq;
using ServiceStack;
namespace ServerSentEvents
{
public class AppHost : AppSelfHostBase
{
/// <summary>
/// Default constructor.
/// Base constructor requires a name and assembly to locate web service classes.
/// </summary>
public AppHost()
: base("ServerSentEvents", typeof(AppHost).Assembly)
{
}
/// <summary>
/// Application specific configuration
/// This method should initialize any IoC resources utilized by your web service classes.
/// </summary>
/// <param name="container"></param>
public override void Configure(Container container)
{
SetConfig(new HostConfig
{
#if DEBUG
DebugMode = true,
WebHostPhysicalPath = "~/../..".MapServerPath(),
#endif
});
container.Register<IServerEvents>(c => new MemoryServerEvents());
Plugins.Add(new ServerEventsFeature
{
OnPublish = (res, msg) =>
{
// Throws an exception
//res.Write("\n\n\n\n\n\n\n\n\n\n"); // Force flush: http://stackoverflow.com/questions/25960723/servicestack-sever-sent-events/25983774#25983774
//res.Flush();
}
});
container.Register(new FrontendMessages(container.Resolve<IServerEvents>()));
}
}
public class FrontendMessage
{
public string Level { get; set; }
public string Message { get; set; }
}
public class FrontendMessages
{
private readonly IServerEvents _serverEvents;
private Timer _timer;
public FrontendMessages(IServerEvents serverEvents)
{
if (serverEvents == null) throw new ArgumentNullException(nameof(serverEvents));
_serverEvents = serverEvents;
var ticks = 0;
_timer = new Timer(_ => Info($"Tick {ticks++}"), null, 500, 500);
}
public void Info(string message, params object[] parameters)
{
var frontendMessage = new FrontendMessage
{
Level = "success",
Message = message
};
Console.WriteLine("Sending message: " + frontendMessage.Message);
_serverEvents.NotifyChannel("messages", frontendMessage);
}
}
}
とクライアント:問題はあなたです
Message from server Object {Level: "success", Message: "Tick 28"}
Message from server Object {Level: "success", Message: "Tick 35"}
Message from server Object {Level: "success", Message: "Tick 42"}
Message from server Object {Level: "success", Message: "Tick 49"}
[この質問](http:// stackoverflo w.com/questions/25960723/servicestack-sever-sent-events?lq=1)?それは似ています –
はい、サンプルでわかるように、私は示唆されたOnPublishコードを含みました。私はこのケースでは例外をスローするので、コメントアウトしました。それは私の現実世界のコード思考を投げているわけではありません。しかし、それはどちらもうまくいかない。 –