【问题标题】:Cannot repeatedly F5-deploy an OWIN Service Fabric application in VS 2015 RC无法在 VS 2015 RC 中重复 F5 部署 OWIN Service Fabric 应用程序
【发布时间】:2015-10-03 11:23:27
【问题描述】:

重现步骤:

  1. 创建一个应用程序(在我的例子中,按照 OWIN+Web API 教程使用两个无状态服务,并将每个实例计数保留为 1)
  2. F5-deploy 启动应用程序 - 一切正常,我可以在 Service Fabric Explorer 中看到应用程序
  3. 在 VS 2015 (RC) 中按 Shift-F5 停止调试 - 应用程序继续在 Service Fabric Explorer 中运行
  4. 再次F5-deploy -- 每个无状态服务出现异常,如下:
System.Reflection.TargetInvocationException was unhandled by user code
  HResult=-2146232828
  Message=Exception has been thrown by the target of an invocation.
  Source=mscorlib
  StackTrace:
       at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
       at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
       at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at Microsoft.Owin.Hosting.ServerFactory.ServerFactoryAdapter.Create(IAppBuilder builder)
       at Microsoft.Owin.Hosting.Engine.HostingEngine.Start(StartContext context)
       at Microsoft.Owin.Hosting.WebApp.Start(String url, Action`1 startup)
       at Infrastructure.OwinCommunicationListener.OpenAsync(CancellationToken cancellationToken) in C:\Users\Lars\Documents\Visual Studio 2015\Projects\WebApiSF\Infrastructure\OwinCommunicationListener.cs:line 47
       at Microsoft.ServiceFabric.Services.StatelessServiceBase.<OpenCommunicationListenerAsync>d__8.MoveNext()
  InnerException: 
       ErrorCode=5
       HResult=-2147467259
       Message=Access is denied
       NativeErrorCode=5
       Source=System
       StackTrace:
            at System.Net.HttpListener.AddAllPrefixes()
            at System.Net.HttpListener.Start()
            at Microsoft.Owin.Host.HttpListener.OwinHttpListener.Start(HttpListener listener, Func`2 appFunc, IList`1 addresses, IDictionary`2 capabilities, Func`2 loggerFactory)
            at Microsoft.Owin.Host.HttpListener.OwinServerFactory.Create(Func`2 app, IDictionary`2 properties)
       InnerException: 

如果我在第 3 步之后删除每个应用程序,然后在第 4 步再次 F5 部署之前取消配置应用程序类型,它会起作用。仅仅删除每个应用程序不会。

更新:重建和 F5 部署似乎间歇性地工作,但只是 F5 部署没有,至少据我所知。我还想了一会儿,增加 ServiceManifest 版本和 ApplicationTypeVersion 会有所帮助,但这也不能始终如一地工作。唯一始终有效的是删除和取消配置应用程序和应用程序类型。

我在 Windows 8.1 Pro x64 上以管理员身份运行 VS 2015 RC,服务是 .NET 4.5,就像教程中一样。

【问题讨论】:

  • 您在这里找到解决方案了吗?我似乎遇到了非常相似的问题
  • 我没有看到这个问题再次出现;目前我没有在 SF 中构建任何 Web API 服务。
  • 感谢您的回复。我设法将我遇到的问题缩小到我的病毒防护上。我有两台电脑都打开了这个解决方案,一台一直很好,而另一台一直在播放。关闭正在播放的病毒防护似乎让事情变得更好。

标签: azure azure-service-fabric


【解决方案1】:

这里的错误信息很关键:Message=Access is denied.

通常这意味着以下两种情况之一:

  1. 运行您的服务的帐户(默认为网络服务)无权打开所需 URL 上的侦听器。必须设置 URL ACL。当您在 ServiceManifest.xml 中指定 HTTP 类型的输入端点时,Service Fabric 会自动为您执行此操作。
  2. 其他进程已在使用该端口。

鉴于它在您第一次部署时就可以工作,它可能不是#1。并且鉴于它在您删除和取消配置应用程序时有效,我猜您的主机进程在您再次 F5 时不会被终止。第二次F5的时候,可以查看一下你的服务的服务宿主进程是否还在运行吗?

【讨论】:

  • 否,发生异常时旧的服务宿主进程不再运行。有一个进程以相同的可执行文件名称运行(webapisf.exe,控制台应用程序的名称——我假设这就是您所说的“服务主机”进程),但进程 ID (PID) 不同.这是 VS 捕获异常时附加的那个。
  • 否则,我完全同意你的分析。 :)
  • 好的,所以你说删除应用程序而不取消配置会导致这个问题。您是否可以尝试在不取消配置的情况下删除它,然后做两件事:1,查看服务主机进程是否仍在运行,以及 2,运行 netstat -a 以查看是否有任何东西仍在占用该端点。顺便说一句,服务主机进程只是您的服务 EXE(所以无论您在 VS 的服务项目属性中的“程序集名称”下拥有什么)。
猜你喜欢
  • 2015-07-27
  • 2021-09-14
  • 1970-01-01
  • 2016-07-24
  • 2017-04-16
  • 1970-01-01
  • 2019-02-17
  • 2019-02-14
  • 2018-12-11
相关资源
最近更新 更多