1

重现步骤:

  1. 创建一个应用程序(在我的例子中,按照 OWIN+Web API 教程使用两个无状态服务,并将每个实例计数保留为 1)
  2. F5-deploy 启动应用程序——一切正常,我可以在 Service Fabric Explorer 中看到应用程序
  3. VS 2015 (RC) 中的 Shift-F5 停止调试 - 应用程序继续在 Service Fabric Explorer 中运行
  4. F5-再次部署——每个无状态服务出现异常,如下:
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,就像教程中一样。

4

1 回答 1

0

这里的错误信息是关键:Message=Access is denied。

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

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

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

于 2015-07-17T00:10:17.097 回答