我有一个使用 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
. 这是有道理的 - 但同样,这可能表明我的传输设置存在问题......