我有一些设置&拆解脚本,使用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,而这个失败的是双核。
答案 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已为我解决了该问题。