为什么我的最小 StatefulActorService 会抛出 COMException?

Why might my minimal StatefulActorService be throwing a COMException?

我想尝试一下服务结构有状态参与者服务,所以我在 VS2015.1 中创建了一个合适的项目,并且没有对生成的代码进行任何更改。然后我ran/debugged解决了。我收到以下错误:

System.Runtime.InteropServices.COMException was unhandled
Message: An exception of type 'System.Runtime.InteropServices.COMException' occurred in System.Fabric.dll and wasn't handled before a managed/native boundary
Additional information: Exception from HRESULT: 0x80071BC5

考虑到我的应用程序中现有服务之间可能存在一些干扰,我还构建了一个全新的服务结构解决方案和有状态的actor服务项目(全部采用默认值)。这个项目以完全相同的方式失败了。

  1. 还有其他人可以证实这种行为吗? (这可能是我的开发环境中的东西)
  2. 对可能发生的事情有什么建议吗?
  3. 获取有关失败原因的更多信息的最佳方法是什么? (似乎没有太多跨越那个 com 边界)
  4. 我应该在 visual studio 工具之外尝试吗?

更新 1:

解除 COMException 后,我还得到:

---------------------------
Microsoft Visual Studio
---------------------------
Unable to start debugging 'C:\SfDevCluster\Data\_App\Node.3\Application1Type_App41\Actor1Pkg.Code.1.0.0\Actor1.exe'.

The process has been terminated. 

Refresh the process list before attempting another attach.
---------------------------
OK   
---------------------------

更新 2:

因为我遇到了 Visual Studio 2015.1 install/upgrade 的问题,我不确定这是否与此问题有关。此外,一位同事遵循了相同的步骤并且没有遇到任何问题。所以直接重装完VS2015.1,SF SDK,所有先决条件。不幸的是没有变化。 :(

我还应该说,每次遇到此错误时,Service Fabric Local Cluster Manager 也会中断。如果我尝试打开管理器,我会收到通知:"Failed to open the local cluster manager"

此外,我确实在解决方案中将 SF 应用程序项目作为我的启动项目。 (同样,我有其他 SF 应用程序工作......只要我在新的或现有的 SF 应用程序中尝试有状态的参与者服务,它就会死掉)。

更新 3:

我早该考虑提供这个,但这是调用堆栈...与提醒有关?

[Managed to Native Transition]  
System.Fabric.dll!System.Fabric.KeyValueStoreItemEnumerator.MoveNextHelper()    Unknown
System.Fabric.dll!System.Fabric.Interop.Utility.WrapNativeSyncInvoke<bool>(System.Func<bool> func, string functionTag, string functionArgs) Unknown
System.Fabric.dll!System.Fabric.KeyValueStoreItemEnumerator.MoveNext()  Unknown
Microsoft.ServiceFabric.Actors.dll!Microsoft.ServiceFabric.Actors.KvsActorStateProvider.Enumerate<Microsoft.ServiceFabric.Actors.ActorReminderData>(string keyPrefix, System.Func<byte[], Microsoft.ServiceFabric.Actors.ActorReminderData> deserializeFunc)    Unknown
Microsoft.ServiceFabric.Actors.dll!Microsoft.ServiceFabric.Actors.KvsActorStateProvider.Microsoft.ServiceFabric.Actors.IActorStateProvider.LoadRemindersAsync.AnonymousMethod__2a() Unknown
mscorlib.dll!System.Threading.Tasks.Task.Execute()  Unknown
mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)   Unknown
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx)   Unknown
mscorlib.dll!System.Threading.Tasks.Task.ExecuteWithThreadLocal(ref System.Threading.Tasks.Task currentTaskSlot)    Unknown
mscorlib.dll!System.Threading.Tasks.Task.ExecuteEntry(bool bPreventDoubleExecution) Unknown
mscorlib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch()    Unknown

更新 4

我使用了一种更有力(诊断更少)的方法。我重建了我的开发机器。基于我在 Update 1 安装中遇到的奇怪行为,我担心我已经破坏了我的构建箱。我重建了OS,重新安装了vs2015.1和SF SDK,现在可以正常工作了。您的里程可能会有所不同:|

Visual Studio 中的启动项目应设置为 Service Fabric 应用程序。例如,Actor 的控制台应用程序项目无法直接启动,因为它们需要通过 Service Fabric 进行部署和激活。

上面提到的HRESULT对应结构错误代码NoWriteQuorum。有关错误代码的更多信息,请参阅 https://msdn.microsoft.com/en-us/library/azure/system.fabric.fabricerrorcode.aspx。您的集群是如何配置的——有多少个节点?您的 actor 服务是如何配置的(多少个分区/分钟和目标副本数)?

如果你不调试就开始,你能部署你的应用程序吗?如果是,您是否尝试在 Service Fabric Explorer 或 Powershell 中查看应用程序的运行状况?