2016-09-30 70 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

如果您与我们为什么ü需要知道的分享,我可以帮我们想出一个更好的解决方案。 –

+0

我们在VS中使用F5在本地运行解决方案以进行调试,而不是部署到需要很长时间的集群。 – user1496062

+0

我不知道新的2.2 SDK是否能解决您的问题。它引入了一个很棒的功能:使用单节点集群进行本地调试。您可以查看发行说明以获取更多信息https://blogs.msdn.microsoft.com/azureservicefabric/2016/09/13/release-of-service-fabric-sdk-2-2-207-and-runtime-5 -2-207/ –

回答

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

如果(IsSFHosted == false){starviatweblistener(..)} //显然不适用于有状态服务 – user1496062

+0

GetNodeContext不会在本地调试群集和本地群集上引发异常。不过,我不明白这是如何工作的。我不得不改变代码来使它工作。 var node = FabricRuntime.GetNodeContext(); return node.IPAddressOrFQDN!=“localhost”; – cassandrad

相关问题