1

我有一个使用 Windows 身份验证保护的独立本地 Service Fabric 群集。

在这个应用程序中,我有一个 ASP.NET Core WebApi 无状态服务,它尝试通过远程处理与另一个无状态服务进行通信。不幸的是,当 WebApi 服务尝试 RPC 到无状态服务时,我收到以下错误:

System.AggregateException: One or more errors occurred. ---> System.Fabric.FabricConnectionDeniedException: Not authorized to connect ---> System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x80071C43
       at Microsoft.ServiceFabric.FabricTransport.NativeServiceCommunication.IFabricServiceCommunicationClient2.EndRequest(IFabricAsyncOperationContext context)
       at Microsoft.ServiceFabric.FabricTransport.Client.FabricTransportClient.EndRequest(IFabricAsyncOperationContext context)
       at System.Fabric.Interop.AsyncCallOutAdapter2`1.Finish(IFabricAsyncOperationContext context, Boolean expectedCompletedSynchronously)

   --- End of inner exception stack trace --

此外,我可以确认

  • 将相同的应用程序部署到“开发集群”(即我的本地计算机或另一台在一台计算机上运行所有节点的远程 Service Fabric 集群)时,我没有收到错误 - 因此我的 AD 帐户可能存在问题'已经用来设置我的多机集群(我正在使用机器组帐户)。

  • 创建客户端代理时,我确实设置了安全凭证以使用 Windows 身份验证 - 即

            var transportSettings = new FabricTransportRemotingSettings
            {
                SecurityCredentials = new WindowsCredentials()
            };
            Func<IServiceRemotingCallbackClient, IServiceRemotingClientFactory> clientProxyFactory = c => new FabricTransportServiceRemotingClientFactory(transportSettings);
    
            var serviceProxyFactory = new ServiceProxyFactory(clientProxyFactory);
            TService clientProxy = serviceProxyFactory.CreateServiceProxy<TService>(uri);
            return clientProxy;
    
  • 在上面的代码中,如果我改为使用: SecurityCredentials = new NoneSecurityCredentials()然后我得到一个类似FabricConnectionDeniedException但消息略有不同的说Client is not authorised to connect. 这是有道理的 - 但同样,这可能表明我的传输设置存在问题......

4

0 回答 0