C# 通过远程处理调用无状态服务时的服务结构FabricConnectionDexception

C# 通过远程处理调用无状态服务时的服务结构FabricConnectionDexception,c#,asp.net-web-api,azure-service-fabric,service-fabric-stateless,C#,Asp.net Web Api,Azure Service Fabric,Service Fabric Stateless,我有一个独立的内部部署服务结构群集,它使用Windows身份验证进行保护 在这个应用程序中,我有一个ASP.NET核心WebApi无状态服务,它试图通过远程处理与另一个无状态服务通信。不幸的是,当WebApi服务尝试RPC到无状态服务时,我遇到以下错误: System.AggregateException: One or more errors occurred. ---> System.Fabric.FabricConnectionDeniedException: Not authori

我有一个独立的内部部署服务结构群集,它使用Windows身份验证进行保护

在这个应用程序中,我有一个ASP.NET核心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 --
此外,我可以证实这一点

  • 当将同一个应用程序部署到“开发集群”(即,我的本地计算机或另一台远程服务结构集群,在一台计算机上运行它的所有节点)时,我没有收到错误-因此,我用来设置多机集群的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;
    
    var transportSettings=新的FabricTransportRemotingSettings
    {
    SecurityCredentials=新WindowsCredentials()
    };
    Func clientProxyFactory=c=>新的FabricTransportServiceRemotingClientFactory(传输设置);
    var serviceProxyFactory=新serviceProxyFactory(clientProxyFactory);
    TService clientProxy=serviceProxyFactory.CreateServiceProxy(uri);
    返回clientProxy;
    
  • 在上述代码中,如果我改为使用:
    SecurityCredentials=new nonsecuritycredentials()
    然后我得到一个类似的
    FabricConnectionDexception
    ,但消息略有不同,表示
    客户端未被授权连接。这是有道理的-但同样,可能表明我的传输设置存在问题


更新1:我也尝试过使用策略和指定不同的系统和域帐户,但是我仍然无法克服相同的错误。更新2:我成功地使用了客户端和服务端的noneseurityCredentials()(当我最初使用非SecurityCredentials时,我忘了在无状态服务的CreateServiceInstanceListeners()方法中也使用此设置,因此我最初的尝试拒绝了客户端授权)。虽然这提供了一个解决方法,但从安全角度来看,这并不是最优的。鉴于所有服务都在NetworkService NT帐户下运行,我猜这个问题的根源在于机器组AD帐户的设置方式……有人对如何让Windows凭据工作有一些想法吗?我遇到了同样的问题,您解决了吗解决了这个问题吗?更新1:我也尝试过使用策略和指定不同的系统和域帐户,但是我仍然无法克服相同的错误。更新2:我成功地使用了客户端和服务端的NoneSecurityCredentials()(当我最初使用非SecurityCredentials时,我忘了在无状态服务的CreateServiceInstanceListeners()方法中也使用此设置,因此我最初的尝试拒绝了客户端授权)。虽然这提供了一个解决方法,但从安全角度来看,这并不是最优的。鉴于所有服务都在NetworkService NT帐户下运行,我猜这个问题的根源在于机器组AD帐户的设置方式……有人对如何让Windows凭据工作有一些想法吗?我遇到了同样的问题,您解决了吗你有这个问题吗?