2016-09-30 6 views
7

時々、Visual Studioからローカルにプロジェクトを実行すると、例外ではなくSFでホストされているかどうかを検出する良い方法があります。私はおそらくパスまたはエントリのアセンブリを見ることができますが、より良い方法が必要です。サービスファブリックで稼働しているかどうかを確認する方法

try 
{ 
    ServiceRuntime.RegisterServiceAsync("FisConfigUIType", 
     context = > new WebHost <Startup> (context, loggerFactory, "ServiceEndpoint", Startup.serviceName)).GetAwaiter().GetResult(); 
    Thread.Sleep(Timeout.Infinite); 
} 
catch (FabricException sfEx) 
{ 
    RunLocal(args, loggerFactory); 
} 
+0

からあなたはuが知っておく必要がありますなぜ私たちと共有している場合は、私は、私たちはより良い解決策を考え出すに役立つかもしれません。 –

+0

私たちは、ソリューションをローカルのVSをF5でローカルで実行し、デバッグに時間がかかるクラスタにデプロイする代わりにデバッグします。 – user1496062

+0

新しい2.2 SDKがあなたの問題を解決するかどうか疑問に思います。それは素晴らしい機能を導入しました:1ノードクラスタでのローカルデバッグ。詳細は、リリースノートを参照してください。https://blogs.msdn.microsoft.com/azureservicefabric/2016/09/13/release-of-service-fabric-sdk-2-2-207-and-runtime-5 -2207/ –

答えて

4

これは私が出ているものですが、例外なく、何かが良くなる(およびコアを使用するいくつかのプロジェクトに注意してください)でしょう

static bool IsSFHosted() 
{ 
    try 
    { 
     FabricRuntime.GetNodeContext(); 
     return true; 
    } 
    catch (FabricException sfEx) when (sfEx.HResult == -2147017661 || sfEx.HResult == -2147017536 || sfEx.InnerException?.HResult == -2147017536) 
    { 
     return false; 
    } 
} 

など。

var isSFHosted = IsSFHosted(); 
var servicesPreRegister = builder.GetPreRegisterServicesForStore(node: node, security: false); 

if (isSFHosted) 
{ 
    ServiceRuntime.RegisterServiceAsync("DeliveriesWriteType", 
     context => new WebAPI(context, loggerFactory, servicesPreRegister)).GetAwaiter().GetResult(); 
} 
else 
{ 
    loggerFactory.AddConsole(); 
    // run with local web listener with out SF 
} 
+0

これがどのように機能するのか正確に説明できますか? – cassandrad

+0

If(IsSFHosted == false){starviatweblistener(..)} //ステートフルサービスでは明らかに動作しません – user1496062

+0

GetNodeContextは、ローカルデバッグクラスタとオンプレミスクラスタで例外をスローしません。それでも、私はこれがどのように機能するのか理解できません。コードを変更して動作させる必要がありました。 var node = FabricRuntime.GetNodeContext(); return node.IPAddressOrFQDN!= "localhost"; – cassandrad

関連する問題