Azure Compute Emulator错误“通信对象...不能用于通信,因为它处于Faulted状态。”

时间:2014-10-30 16:03:38

标签: azure

我有一些设置&拆解脚本,使用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"

对于删除不一致的csrun调用失败,并显示以下错误:

Encountered an unexpected error The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state.
Server stack trace:
at System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at System.IDisposable.Dispose()
at Microsoft.ServiceHosting.Tools.DevelopmentFabric.SingleInstanceFabricClient.Connect()
at Microsoft.ServiceHosting.Tools.DevelopmentFabric.DevFabric.EnsureClient(Boolean checkConnection)
at Microsoft.ServiceHosting.Tools.DevelopmentFabric.DevFabric.d__0.MoveNext()
at Microsoft.ServiceHosting.Tools.CloudServiceRun.DoActions.RemoveAll()
at Microsoft.ServiceHosting.Tools.CloudServiceRun.DoActions.ParseArguments(String[] args, Boolean doActions)
at Microsoft.ServiceHosting.Tools.CloudServiceRun.DoActions.ExecuteActions(String[] args).

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

Encountered an unexpected error The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state.
Server stack trace:
at System.ServiceModel.Channels.CommunicationObject.Close(TimeSpan timeout)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at System.IDisposable.Dispose()
at Microsoft.ServiceHosting.Tools.DevelopmentFabric.SingleInstanceFabricClient.RunServiceDeployment(String tenantName)
at Microsoft.ServiceHosting.Tools.DevelopmentFabric.Deployment.Start()
at Microsoft.ServiceHosting.Tools.CloudServiceRun.DoActions.Run(DirectoryInfo dir, FileInfo serviceConfiguration, Boolean launchBrowser, Boolean paused, String debugger, Boolean useIISExpress, List`1 portOverrides)
at Microsoft.ServiceHosting.Tools.CloudServiceRun.DoActions.ParseArguments(String[] args, Boolean doActions)
at Microsoft.ServiceHosting.Tools.CloudServiceRun.DoActions.ExecuteActions(String[] args).

这是Compute Emulator v2.4。

我已确认web.config是可写且有效的。 (根据this thread的建议。)

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

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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 ++运行时,我猜以前是由Visual Studio的早期版本安装的,但VS2017默认不是。

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

答案 2 :(得分:0)

c:\Program Files\Microsoft SDKs\Azure\Emulator\csrun.exe.config中启用更多日志记录,调查csrun.svclog并调查%LOCALAPPDATA%\dftmp中的日志后,确定dfservice.exe中可能发生根错误:" System.UnauthorizedAccessException:拒绝访问。 (HRESULT异常:0x80070005(E_ACCESSDENIED))"。

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

时出现问题

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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