Service Fabric 中的 .NET Core RC2
Posted
技术标签:
【中文标题】Service Fabric 中的 .NET Core RC2【英文标题】:.NET Core RC2 in Service Fabric 【发布时间】:2016-09-18 12:46:30 【问题描述】:我想将一个新的 .NET Core RC2 MVC 应用程序添加到现有的 Service Fabric 群集,但我不知道该怎么做。
我查看了几个 RC1 示例,但这也没有让我更进一步。 我了解您需要在 ServiceManifest.xml 文件中添加一个入口点。 但在 RC1 示例中,它们指向 dnx.exe,该文件已在 RC2 中删除:
<EntryPoint>
<ExeHost>
<Program>approot\runtimes\dnx-clr-win-x64.1.0.0-rc1-update1\bin\dnx.exe</Program>
<Arguments>--appbase approot\src\ChatWeb Microsoft.Dnx.ApplicationHost Microsoft.ServiceFabric.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener</Arguments>
<WorkingFolder>CodePackage</WorkingFolder>
<ConsoleRedirection FileRetentionCount="5" FileMaxSizeInKb="2048" />
</ExeHost>
</EntryPoint>
我应该在 .NET Core 的 RC2 版本中使用哪个 EntryPoint?
谢谢!
【问题讨论】:
【参考方案1】:查看此公告:
Announcing ASP.NET Core RC2
如您所见,您的 RC2 ASP.NET Core 应用程序变成了控制台应用程序。
也就是说,您的入口点是您的 EXE,它来自您的 ASP.NET Core 控制台应用程序的编译。
因此,您可以在 Program.cs 中设置工具链,然后构建 Service Fabric 将用于 Entry 的 EXE,而不是依赖 DNX 从 Startup.cs 中获取 Main 方法。
public class Program
public static void Main(string[] args)
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Build();
host.Run();
所以你的清单应该是这样的:
<EntryPoint>
<ExeHost>
<Program>YourApp.Exe</Program>
</ExeHost>
</EntryPoint>
【讨论】:
感谢您的回复。我相信这是正确的,但构建项目并没有为我提供 .exe 文件。只是一个.dll。你知道如何设置我的项目来为我提供这个 .exe 文件吗? @johandroid 您的项目必须是控制台应用程序。从头开始创建新的 Service Fabric 项目,然后选择 Stateless Web API。创建它后,观察它显示它是 C# 控制台应用程序。如果您构建它,您将在您的 bin 文件夹中获得 EXE。如果您打开 PackageRoot\ServiceManifest.xml,您会注意到 EXE 被设置为 EntryPoint。由于 ASP.NET Core RC2 是基于 OWIN 和 WebAPI 2 的思想构建的,因此您需要设置相同的项目结构。请记住,Service Fabric 中没有 IIS - Web 应用程序必须是自托管的,这就是您的 Main 方法中设置的内容。 我是同级别的,正在找例子……有吗?现在我将关注blogs.msdn.microsoft.com/lucian/2015/08/19/… 使用 project.json 等 有人试用过托管包吗?【参考方案2】:正如我在评论中已经提到的,它不一定是控制台应用程序。看看https://github.com/weidazhao/Hosting
克隆一下,看到SmsService和CounterService的项目都是ASP.NET Core 1.0 RC2项目。
【讨论】:
这实际上是不对的。提到的解决方案中的“Sms”项目实际上是控制台应用程序 - 它在您的 bin/debug 文件夹中生成一个可以运行的 EXE。唯一的补充是在工具链中还添加了 ServiceFabric 托管。如果删除行 .UseServiceFabricEndpoint("SmsTypeEndpoint") 和 ServiceRuntime.RegisterServiceAsync("SmsType", serviceContext => new SmsService(serviceContext, communicationContext)).GetAwaiter().GetResult();并将 appSettings.json 设为可选,您将能够在您自己的 PC 上运行 EXE,而无需 Service Fabric。 嗯,这似乎是 ASP.NET Core 项目的默认设置,通常您会在 Program.cs 主入口点中使用 WebHostBuilder。它是一个控制台应用程序的事实是隐藏的。我的回答是,您不必自己创建控制台应用程序,只需让它成为一个 ASP.NET Core 项目即可。您的回答也是正确的,但我回答了一个示例链接。以上是关于Service Fabric 中的 .NET Core RC2的主要内容,如果未能解决你的问题,请参考以下文章
Service Fabric 中的 .NET Core RC2
Azure Service Fabric 中 ASP.NET Core 应用程序中的 WebpackDevMiddleware
从 .Net Core Stateless Service 调用 .Net 框架 Service Fabric Actor
如何在基于 Service Fabric ASP.NET 5 的服务中扩展从 StatelessService 派生的类?
Service Fabric Guest .Net Core 3.1 API exe 的 Azure DevOps 构建管道在创建包时失败