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

8
我正在尝试创建一个Visual Studio项目模板,其中包括一个带有StatelessService的Azure Service Fabric项目。
在样板Program入口点代码中,我遇到了一个FabricConnectionDeniedException异常。 我该在哪里设置连接信息或修复此异常? 我正在运行本地群集管理器。 我已经查看了各种.xml配置文件,但没有看到任何内容。 我需要在群集管理器中将我的应用程序列入白名单吗?
以下是我从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个回答

11
这是因为您正在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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接