1

既存の Cloud Service WorkerRole をステートレス サービスとして Service Fabric に移植しています。元のクラウド サービスは、SignalR と Service Bus (SignalR バックプレーンとして) を使用して、リッスンしているクライアントに通知を送信します。セットアップの一部を行う Startup クラスがあります。

class Startup
{
    public void Configuration(IAppBuilder app)
    {
        String connectionString = "Endpoint=sb://[name].servicebus.windows.net/;SharedSecretIssuer=owner;SharedSecretValue=[key]";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "InSys");
        app.MapSignalR();
        Notifications.Hub = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
    }
}

WorkerRole の OnStart() メソッドで、次のように OWIN を開始します。

var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["HttpEndpoint"];
var baseUri = $"{endpoint.Protocol}://{endpoint.IPEndpoint}";
var app = WebApp.Start<Startup>(new StartOptions(url: baseUri));

これ (つまり、SignalR サービス バス バックプレーンへの接続) は、Service Fabric 内のステートレス サービスに対してどのように行われますか?

4

2 に答える 2

0

Owin リスナーを使用してステートレス サービスを作成します。次に、起動時に signalR とバックプレーン (サービス バスまたは SQL) を構成します。理想的には直面する問題は、ネゴシエート (Signalr クライアントとサーバー間のハンドシェイク) に関するものです。この時点で、クロス オリジン リクエストの構成を試みます。永続的な接続のサンプル コードは以下のようになります。

また、重要な行appBuilder.UseAesDataProtectorProvider("Your Key")にも注意してください。この結果、ほとんどの場合、HTTP 400 で接続することはなくなります。これは、SignalR がハンドシェイクで少なくとも 2 つの要求を行い、それらが通常 2 つの異なるコンピューターにヒットするためです。

説明のmarcin budnyに感謝します。

var config = new HttpConfiguration();

// Configure your origins as required.

var cors = new EnableCorsAttribute("*", "*", "*");

config.EnableCors(cors);

FormatterConfig.ConfigureFormatters(config.Formatters);

RouteConfig.RegisterRoutes(config.Routes);

appBuilder.UseWebApi(config);

GlobalHost.DependencyResolver.UseServiceBus("yourconnection string comes here", "signalrbackplaneserver");
appBuilder.UseAesDataProtectorProvider("some password");
appBuilder.Map("/echo", map =>
{
                map.UseCors(CorsOptions.AllowAll).RunSignalR<MyEndPoint>();
});
于 2016-11-10T10:49:43.357 に答える