2

グローバルになりたいシグナルクライアントがあります。

endpointconfig の Init() で signalr クライアントを作成するのが最善だと思います。

public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
    public static HubConnection hubConnection;
    public static IHubProxy hubProxy;

    public void Init()
    {
        Configure.With()
            .DefiningEventsAs(t => t.Namespace != null && t.Namespace.Contains(".Events."))
            .DefiningMessagesAs(t => t.Namespace != null && t.Namespace.Contains(".Messages."))
            .StructureMapBuilder(new Container(new DependencyRegistry()));

        Configure.Serialization.Json();

        hubConnection = new HubConnection("http://localhost:58120"); 
        hubProxy = hubConnection.CreateHubProxy("AmsHub");
        hubProxy.On<string>("receiveServerPush", x => System.Diagnostics.Debug.WriteLine(x));
        hubConnection.Start().Wait();
    }

    public class DependencyRegistry : Registry
    {
        public DependencyRegistry()
        {
            Scan(x =>
            {
                x.AssembliesFromApplicationBaseDirectory();
                x.ExcludeNamespace("StructureMap");
                x.WithDefaultConventions();
            });
        }
    }
}

私が混乱しているのは、メッセージハンドラーでhubConnectionとhubProxyを参照する方法ですか? 私はNServicebusをジェリーリギングしているようです。

public class TestHandler : IHandleMessages<AMS.Infrastructure.Events.IEvent>
{
    public void Handle(AMS.Infrastructure.Events.IEvent message)
    {
        EndpointConfig.hubProxy.Invoke("ServerFunction", "yodle");
    }
}

PS: 接続とプロキシをグローバルにする必要がある理由は、シグナル提供者によると、新しい hubConnection の生成にコストがかかるためです。ハブ接続の作成と破棄を何度も繰り返すことは強く推奨されません。彼らは、ハブ接続をグローバル/静的(?) にすることは問題ないことを発見しました。

4

2 に答える 2