【问题标题】:Azure Compute Emulator error "The communication object ... cannot be used for communication because it is in the Faulted state."Azure Compute Emulator 错误“通信对象...无法用于通信,因为它处于故障状态。”
【发布时间】:2014-10-30 16:03:37
【问题描述】:

我有一些设置和拆卸脚本,它们使用 csrun.exe 为一些自动化测试准备本地计算模拟器。

C:\Program Files\Microsoft SDKs\Azure\Emulator\csrun.exe /removeall C:\Program Files\Microsoft SDKs\Azure\Emulator\csrun.exe /devfabric:clean C:\Program Files\Microsoft SDKs\Azure\Emulator\csrun.exe /run:"c:\myapp\csx\Release";"c:\myapp\bin\Release\app.publish\ServiceConfiguration.Local.cscfg"

对 removeall 的 csrun 调用不一致地失败并出现以下错误:

遇到意外错误通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为它处于故障状态。 服务器堆栈跟踪: 在 System.ServiceModel.Channels.CommunicationObject.Close(时间跨度超时) 在 [0] 处重新抛出异常: 在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg) 在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 类型) 在 System.IDisposable.Dispose() 在 Microsoft.ServiceHosting.Tools.DevelopmentFabric.SingleInstanceFabricClient.Connect() 在 Microsoft.ServiceHosting.Tools.DevelopmentFabric.DevFabric.EnsureClient(布尔检查连接) 在 Microsoft.ServiceHosting.Tools.DevelopmentFabric.DevFabric.d__0.MoveNext() 在 Microsoft.ServiceHosting.Tools.CloudServiceRun.DoActions.RemoveAll() 在 Microsoft.ServiceHosting.Tools.CloudServiceRun.DoActions.ParseArguments(字符串 [] args,布尔 doActions) 在 Microsoft.ServiceHosting.Tools.CloudServiceRun.DoActions.ExecuteActions(String[] args)。

部署的 csrun 调用也不一致地失败并出现相同的错误(堆栈跟踪略有不同):

遇到意外错误通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为它处于故障状态。 服务器堆栈跟踪: 在 System.ServiceModel.Channels.CommunicationObject.Close(时间跨度超时) 在 [0] 处重新抛出异常: 在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg,IMessage retMsg) 在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData,Int32 类型) 在 System.IDisposable.Dispose() 在 Microsoft.ServiceHosting.Tools.DevelopmentFabric.SingleInstanceFabricClient.RunServiceDeployment(字符串租户名称) 在 Microsoft.ServiceHosting.Tools.DevelopmentFabric.Deployment.Start() 在 Microsoft.ServiceHosting.Tools.CloudServiceRun.DoActions.Run(DirectoryInfo 目录,FileInfo serviceConfiguration,布尔启动浏览器,布尔暂停,字符串调试器,布尔 useIISExpress,列表`1 portOverrides) 在 Microsoft.ServiceHosting.Tools.CloudServiceRun.DoActions.ParseArguments(字符串 [] args,布尔 doActions) 在 Microsoft.ServiceHosting.Tools.CloudServiceRun.DoActions.ExecuteActions(String[] args)。

这是计算模拟器 v2.4。

我已确认 web.config 是可写且有效的。 (正如this thread 所建议的那样。)

我在另一台机器上进行了类似的设置,没有任何问题。我知道的唯一区别是工作机器有一个单核 CPU,而这个失败的是双核。

【问题讨论】:

  • 您是否解决了这个问题,因为我刚刚开始收到此错误?
  • 我也刚开始得到这个,可以通过在我的云服务设置中删除 https 端点来解决它。我每月的天蓝色信用额度用完了,我怀疑这与它有关。
  • 通过将虚拟机移动到另一台主机来修复它
  • 我从未修复过它,同样我只是切换了哪些构建+测试在哪些虚拟机上运行。

标签: azure


【解决方案1】:

如果 %LocalAppData%\dftmp\DFServiceLogs 中的文件报告的错误如下所示:

DFService Information: 0 : [00002796:00000014, 2019/02/06 17:47:59.054] Exception:System.Runtime.InteropServices.SEHException (0x80004005): External component has thrown an exception.
   at GARStartRoleEx(UInt16* , UInt16* , UInt16* , _RUNTIME_CERTIFICATE_BLOB_TYPE , Byte* , UInt32 )
   at Microsoft.WindowsAzure.GuestAgent.EmulatorRuntime.EmulatorRuntimeImpl.StartRole(String roleInstanceId, CertificateBlobType certsBlobType, Byte[] certificatesBlob)
   at Microsoft.ServiceHosting.Tools.DevelopmentFabric.Fabricator.StartRoleInstance(RDConfig roleInstanceConfig)`

那么您的问题可能是未安装Compute Emulator 所依赖的C++ Runtime。它需要 VS 2012 C++ Runtime,我猜它以前是由早期版本的 Visual Studio 安装的,但默认情况下不与 VS2017 一起安装。

http://www.microsoft.com/en-us/download/details.aspx?id=30679 安装正确的运行时为我解决了这个问题。

【讨论】:

    【解决方案2】:

    就我而言,我删除了用于 SSL 的证书并创建了一个新证书。解决了我的问题。

    【讨论】:

    • 我能够通过将证书导入 IIS 来解决一些警告。但是通信错误仍然存​​在。
    【解决方案3】:

    在启用更多登录c:\Program Files\Microsoft SDKs\Azure\Emulator\csrun.exe.config、调查csrun.svclog 和调查%LOCALAPPDATA%\dftmp 中的日志后,确定根错误很可能发生在dfservice.exe 中:“System.UnauthorizedAccessException: Access is denied. ( HRESULT 异常:0x80070005 (E_ACCESSDENIED))"。

    使用Procmon,发现在错误发生前后,dfservice.exe在尝试访问myapp\csx\Release\roles\MyWorkerRoleName\base\x64\WaHostBootstrapper.exe时遇到了“FILE LOCKED WITH ONLY READERS”的问题

    我最好的猜测是,尽管我努力进行清理和删除,但模拟器仍在保留先前实例中的文件。

    我想我通过更改我的构建脚本来解决这个问题,以便在 %TEMP% 中为每个构建执行(和模拟器部署)创建一个新的唯一目录,我可以在其中预先复制 csx\Release\ 的内容;然后我从那里部署到模拟器。 (使用一些额外的脚本代码,稍后会尝试递归删除所有这些临时文件,但会忽略任何错误。)

    【讨论】:

      【解决方案4】:

      如果 Compute Emulator 根本没有运行,则会在 UI 中出现同样的错误。那么,日志中的内部异常是 UnauthorizedAccessException。 手动启动它会有所帮助,因为 Studio 调试器会尝试启动,但不会等待,启动过程需要一段时间,当它启动时,调试器已经抛出错误并停止。

      【讨论】:

        【解决方案5】:

        以管理员身份运行 Visual Studio 为我解决了这个问题。

        【讨论】:

          【解决方案6】:

          问题也可能是使用的 SSL 证书在商店中未标记为可导出。重新加载之前已经存在于商店中的证书,但指定了可导出标志,为我解决了这个问题。

          【讨论】:

            猜你喜欢
            • 2010-10-19
            • 2012-11-02
            • 2012-03-13
            • 2019-10-27
            • 2013-08-16
            相关资源
            最近更新 更多