我正在尝试创建一个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;
}
}
答案 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;
}