【问题标题】:Hosting a Console application in Service Fabric在 Service Fabric 中托管控制台应用程序
【发布时间】:2017-07-03 05:10:29
【问题描述】:

我从 Service Fabric 开始。我创建了一个运行以下代码的非常简单的控制台应用程序:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello world!");
        File.AppendAllText("c:\\temp\\hello.txt", "Hello world!" + DateTime.Now.ToString() + "\r\n");
        Console.ReadLine();
    }
}

然后我使用 Visual Studio 创建一个来宾可执行项目并将其指向 exe 应用程序。它安装在 Service Fabric 中,我可以看到文件已创建,但随后 Service Fabric 抛出错误:

错误事件:SourceId='System.FM',Property='State'。 分区低于目标副本或实例计数。 面料:/Test3/Test3Service -1 1 5ef5a0eb-5621-4821-95cb-4c1920ab7f0c (显示 0 个副本中的 0 个。可用副本总数:0。)

这种方法正确吗?我可以在 Service Fabric 中托管 exe 应用程序,还是需要实现/继承某些东西?

编辑

应用程序部署后进入警告状态,显示以下消息:

很快它就会转换到错误状态:

【问题讨论】:

    标签: azure-service-fabric


    【解决方案1】:

    是的,您可以在 Service Fabric 中将简单的控制台应用程序作为来宾可执行文件托管,这应该不是问题。

    您看到的问题可能是因为应用程序试图写入 c:/temp 中的文件,默认情况下您的 Guest Exe 没有权限。尝试删除您的示例代码的那部分,或将其更改为写入hello.txt,它将最终在您的 Guest Exe 运行所在的同一文件夹中。

    您应该将 Service Fabric 节点上的文件存储视为临时存储,而不是依赖于在其中存储数据,因为 Service Fabric 可以在节点之间移动您的服务作为集群维护的一部分。

    有关 SF https://stackoverflow.com/a/37966158/1062217 中文件系统访问的更多详细信息,请参阅此答案

    【讨论】:

    • 我可以看到正在写入的文件。控制台应用程序运行,但 Service Fabric 将其标记为错误。如果我创建一个无状态服务结构应用程序,它可以工作,但我试图按原样托管我的控制台,所以我不必将应用程序移植到服务结构应用程序。我找不到有关问题可能是什么的信息。
    • 尝试运行服务时 Service Fabric 显示的错误是什么?
    • 我已经编辑了问题并添加了我得到的例外情况。
    • 错误代码映射到 STATUS_ACCESS_VIOLATION (ntstatus.h) 或 ERROR_ACCESS_DENIED (winerror.h 为 0x5)。两者似乎都表明导致它崩溃的客人有问题。既然只是guest,那么如果你在同一台机器上手动启动它会怎样呢?
    猜你喜欢
    • 2017-04-29
    • 2014-07-01
    • 2013-05-07
    • 2012-10-21
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多