如何从Visual Studio向Service Fabric群集发布多个应用程序实例?

时间:2017-01-19 14:40:53

标签: 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,但是当我使用新的应用程序名称和新的发布配置文件发布时,我只会收到上述错误。

1 个答案:

答案 0 :(得分:2)

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

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

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

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