visual-studio - 如何从 Visual Studio 将应用程序的多个实例发布到 Service Fabric 群集?

标签 visual-studio powershell azure azure-service-fabric

我在 Visual Studio 中创建了一个无状态服务结构应用程序,需要发布它的两个实例。第一个进展顺利,但是当我尝试发布第二个应用程序时,我收到错误:

2>Application Type  DevelopmentType  and Version  1.0.0  was already registered with Cluster, unregistering it...
2>Unregister-ServiceFabricApplicationType : Application type and version is still in use
2>At C:\Program Files\Microsoft SDKs\Service 
2>Fabric\Tools\PSModule\ServiceFabricSDK\Publish-NewServiceFabricApplication.ps1:224 char:20
2>+             $reg | Unregister-ServiceFabricApplicationType -Force
2>+                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2>    + CategoryInfo          : InvalidOperation: (Microsoft.Servi...usterConnection:ClusterConnection) [Unregister-Serv 
2>   iceFabricApplicationType], FabricException
2>    + FullyQualifiedErrorId : UnregisterApplicationTypeErrorId,Microsoft.ServiceFabric.Powershell.UnregisterApplicatio 
2>   nType
2> 
2>Finished executing script 'Deploy-FabricApplication.ps1'.

我希望实例具有相同的 ApplicationType,但是当我使用新的应用程序名称和新的发布配置文件进行发布时,我只会收到上面的错误。

最佳答案

问题在于,您实际上是在尝试用新的应用程序类型覆盖现有的应用程序类型,但由于现有的应用程序类型有一个与之关联的应用程序,因此您会收到此错误。为了“覆盖”应用程序类型,系统需要删除它并注册新的应用程序类型。但无法删除它,因为它有一个与之关联的现有应用程序。这就是您收到此错误的原因。

有关应用程序类型和应用程序之间差异的一些背景知识。这有点像编程中类和实例之间的区别。应用程序类型代表应用程序的类型。它包含代码、配置和数据。但应用程序类型只是一个定义;它不是一个正在运行的应用程序。创建应用程序时,您将根据应用程序类型创建它。现在您已经有了一个正在运行的应用程序。就像编程类比一样,您可以从一种应用程序类型创建多个应用程序,这正是您想要做的。

当您从 VS 进行部署时,它不知道您想要从集群上的现有应用程序类型创建新应用程序的意图。它假设您想要使用您在项目中定义的代码来部署应用程序。由于 VS 不知道该代码与集群上的代码有何不同,因此它会继续尝试删除任何冲突的应用程序类型(具有相同名称和版本的应用程序类型),以便使用以下代码注册新的应用程序类型:包含在您的项目中。这就是您遇到错误的时候。

那么如何解决这个问题呢?如果您的目的确实是从现有应用程序类型创建另一个应用程序,并且两个应用程序之间没有任何代码差异,那么您需要直接从 PowerShell 处理此问题,而不是使用 VS。您要做的只是集群的基本管理。您需要使用 New-ServiceFabricApplication PowerShell cmdlet(请参阅 https://learn.microsoft.com/en-us/powershell/servicefabric/vlatest/new-servicefabricapplication )。请注意,如果您没有正确配置应用程序,则两个应用程序之间可能会遇到端口冲突。为了避免这种情况,您需要在应用 list 中参数化端口,以便在调用 New-ServiceFabricApplication 时可以提供不同的端口值。

关于visual-studio - 如何从 Visual Studio 将应用程序的多个实例发布到 Service Fabric 群集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41744535/

相关文章:

c# - Visual Studio - 我可以通过网络在 CE 设备上调试我的应用程序吗

visual-studio - 在多台计算机上安装 Visual Studio 2017

powershell - 将一行 cmd 转换为 powershell

xml - 使用Powershell附加/删除空xml节点

c# - 合并异步方法的结果并同步返回

javascript - 一个项目中可以有多个 package.json 吗?

powershell - 在失败/401 Invoke-WebRequest 上捕获响应

azure - AADSTS70001 : Application is not supported for this API version

azure - SQL Azure 数据库给出 "The server could not retrieve metrics (Internal Server Error)."消息

visual-studio - 正确使用 VS_DEBUGGER_WORKING_DIRECTORY 等