FabricConnectionDeniedException - 在哪里设置Azure Service Fabric连接?

时间:2016-03-31 23:42:46

标签: c# azure azure-service-fabric

我正在尝试创建一个Visual Studio项目模板,其中包含一个StatelessService的Azure Service Fabric项目。

在锅炉板Program EntryPoint代码中,我得到了FabricConnectionDeniedException我在哪里设置连接信息或以其他方式修复此异常?我正在运行本地群集管理器。我查看了各种.xml配置文件,但没有看到任何内容。我是否需要在Cluster Manager中将我的应用程序列入白名单?

这是我从Azure Service Fabric复制的样板代码:

    private static void Main()
    {
        try
        {
            // Creating a FabricRuntime connects this host process to the Service Fabric runtime.
            using (var fabricRuntime = System.Fabric.FabricRuntime.Create())
            {
                // The ServiceManifest.XML file defines one or more service type names.
                // RegisterServiceType maps a service type name to a .NET class.
                // When Service Fabric creates an instance of this service type,
                // an instance of the class is created in this host process.
                fabricRuntime.RegisterServiceType(
                    "RunSetManagerServiceType", 
                    typeof(RunSetManagerService));

                ServiceEventSource.Current.ServiceTypeRegistered(
                    Process.GetCurrentProcess().Id, 
                    typeof(RunSetManagerService).Name);

                // Prevents this host process from terminating to keep the service host process running.
                Thread.Sleep(Timeout.Infinite);  
            }
        }
        catch (Exception e)
        { 
           // !!!!!! GETTING FabricConnectionDeniedException HERE !!!!!
            ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString());
            throw;
        }
    }

1 个答案:

答案 0 :(得分:7)

这是因为您在Service Fabric运行时环境之外运行服务EXE。当您将服务编译为EXE时,您不能单独执行它;你必须"部署"它是Service Fabric集群,它将由Service Fabric运行时环境为您执行。

如果您要通过Visual Studio进行部署,请确保将应用程序项目设置为启动项目,而不是服务项目(启动项目将以粗体显示在解决方案资源管理器中。

此外,与您看到的错误无关,但只是抬头:当您升级到最新的2.0.135 SDK时,您需要更新您的服务注册码使用新的ServiceRuntime:

try
{
    ServiceRuntime.RegisterServiceAsync("RunSetManagerServiceType",
        context => new RunSetManagerService(context)).GetAwaiter().GetResult();

    ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(Stateless1).Name);

    // Prevents this host process from terminating so services keep running.
    Thread.Sleep(Timeout.Infinite);
}
catch (Exception e)
{
    ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString());
    throw;
}