【问题标题】:ServiceFabric / IFabricSecretStoreClient / COM ExceptionServiceFabric / IFabricSecretStoreClient / COM 异常
【发布时间】:2019-05-10 07:09:27
【问题描述】:

我在这方面没有找到太多东西,在花了一天的大部分时间之后......我正在寻求帮助......

我得到的例外是:

无法将“System.__ComObject”类型的 COM 对象转换为接口 键入“IFabricSecretStoreClient”。此操作失败,因为 对具有 IID 的接口的 COM 组件上的 QueryInterface 调用 '{38C4C723-3815-49D8-BDF2-68BFB536B8C9}' 由于以下原因而失败 错误:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE))。

我可以使用以下代码实例化有状态服务的代理:

var servicekey = new ServicePartitionKey(0);
  var queryserviceUri = new Uri("fabric:/XXXX/xxxxxxxxxx");
  var proxyHandle = ServiceProxy.Create<IAnInterfaceName>(queryserviceUri, servicekey, TargetReplicaSelector.PrimaryReplica);

然后我使用代理:

var result = await proxyHandle.OperationOnServiceContract(dataPackage);

此时我得到错误...

堆栈跟踪...

在 System.Fabric.FabricClient.CreateNativeClient(IEnumerable1 connectionStringsLocal) at System.Fabric.Interop.Utility.<>c__DisplayClass27_0.<WrapNativeSyncInvoke>b__0() at System.Fabric.Interop.Utility.WrapNativeSyncInvoke[TResult](Func1 func, 字符串 functionTag, 字符串 functionArgs) 在 System.Fabric.Interop.Utility.WrapNativeSyncInvoke(动作动作, 字符串函数标签,字符串函数参数)在 System.Fabric.Interop.Utility.RunInMTA(动作动作)在 System.Fabric.FabricClient.InitializeFabricClient(SecurityCredentials credentialArg,FabricClientSettings 新设置,字符串 [] hostEndpointsArg) 在 Microsoft.ServiceFabric.Services.Client.ServicePartitionResolver.c.b__21_0() 在 Microsoft.ServiceFabric.Services.Client.ServicePartitionResolver.GetClient() 在 Microsoft.ServiceFabric.Services.Client.ServicePartitionResolver.ResolveHelperAsync(Func5 resolveFunc, ResolvedServicePartition previousRsp, TimeSpan resolveTimeout, TimeSpan maxRetryInterval, CancellationToken cancellationToken, Uri serviceUri) at Microsoft.ServiceFabric.Services.Communication.Client.CommunicationClientFactoryBase1.GetClientAsync(Uri serviceUri、ServicePartitionKey partitionKey、TargetReplicaSelector targetReplicaSelector、字符串 listenerName、OperationRetrySettings retrySettings, CancellationToken cancelToken) 在 Microsoft.ServiceFabric.Services.Remoting.V2.FabricTransport.Client.FabricTransportServiceRemotingClientFactory.GetClientAsync(Uri serviceUri、ServicePartitionKey partitionKey、TargetReplicaSelector targetReplicaSelector、字符串 listenerName、OperationRetrySettings retrySettings, CancellationToken cancelToken) 在 Microsoft.ServiceFabric.Services.Communication.Client.ServicePartitionClient1.GetCommunicationClientAsync(CancellationToken cancellationToken) at Microsoft.ServiceFabric.Services.Communication.Client.ServicePartitionClient1.InvokeWithRetryAsync[TResult](Func2 func, CancellationToken cancellationToken, Type[] doNotRetryExceptionTypes) at Microsoft.ServiceFabric.Services.Remoting.V2.Client.ServiceRemotingPartitionClient.InvokeAsync(IServiceRemotingRequestMessage remotingRequestMessage, String methodName, CancellationToken cancellationToken) at Microsoft.ServiceFabric.Services.Remoting.Builder.ProxyBase.InvokeAsyncV2(Int32 interfaceId, Int32 methodId, String methodName, IServiceRemotingRequestMessageBody requestMsgBodyValue, CancellationToken cancellationToken) at Microsoft.ServiceFabric.Services.Remoting.Builder.ProxyBase.ContinueWithResultV2[TRetval](Int32 interfaceId, Int32 methodId, Task1 任务)在 XXXXWeb.Controllers.XXXController.OperationOnServiceContract(XXXRequest xxxRequest) 在 C:\Users\codputer\Source\Repos\xxxxxx\xxxx.Web\Controllers\XXXController.cs:line 44

哦,我正在使用它作为听众:

protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
{
  return this.CreateServiceRemotingReplicaListeners();
}

【问题讨论】:

标签: azure-service-fabric visual-studio-2019


【解决方案1】:

如在这些问题上所述:

每当您使用针对旧版本服务结构运行时的较新 Nuget 包时,就会发生这些 COM 问题,就会发生此类错误。

您应该始终使用针对同一集群运行时版本的软件包,在最后一种情况下,请使用比集群版本更早的软件包。

【讨论】:

  • 真的想要一个更好的错误...我理解为什么错误提到了 COM 接口...但是有多少人知道 COM 仍然在 servicefabric 远程处理的掩护下?在幕后的所有巫毒魔法中,不可能有一个接口在运行时检查并抛出异常 - 接口不匹配 - 升级你的版本!
猜你喜欢
  • 2011-08-08
  • 2012-02-28
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
相关资源
最近更新 更多