You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

连接Web API至Service Fabric无状态服务时V2Listener未找到错误求助

解决Service Fabric Remoting V2中NamedEndpoint 'V2Listener'未找到的错误

这个错误的核心原因很明确:你的后端服务注册的Remoting监听器名称,和客户端ServiceProxy默认寻找的端点名称不匹配。

因为你使用的是Service Fabric Remoting V2,客户端调用ServiceProxy.Create<ICompanyManagement>时,默认会去寻找名为V2Listener的服务端点,但你的后端服务里注册的监听器名称是ServiceEndpoint,这就导致客户端找不到对应的端点,抛出了那个错误。

这里有两种简单的解决方案,你可以任选其一:

方案一:修改服务端的监听器名称为V2Listener

直接把后端服务CreateServiceInstanceListeners方法里的监听器名称改成V2Listener,这样客户端的默认配置就能直接匹配上:

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
    return new[] {
        new ServiceInstanceListener(serviceContext => 
            new FabricTransportServiceRemotingListener(serviceContext, this), 
            "V2Listener") // 将原名称"ServiceEndpoint"替换为"V2Listener"
    };
}

方案二:客户端创建代理时指定端点名称

如果你不想改动服务端的配置,可以在Web API的CompanyController里创建代理时,显式指定服务端使用的监听器名称:

public CompanyController(StatelessServiceContext context)
{
    string serviceUri = $"{context.CodePackageActivationContext.ApplicationName}" + "/MyProject.Management.Company";
    _proxy = ServiceProxy.Create<ICompanyManagement>(
        new Uri(serviceUri),
        listenerName: "ServiceEndpoint"); // 明确指定服务端的监听器名称
}

额外注意事项

  • 请确保你的Microsoft.ServiceFabric.Services.Remoting NuGet包版本和Service Fabric Runtime v6.2.274兼容,.NET Core 2.x环境下要选择对应版本的包,避免版本不兼容带来的隐性问题。
  • 检查服务的ServiceManifest.xml文件,如果里面显式定义了Endpoint节点,要保证节点的Name属性和代码里的监听器名称完全一致,比如:
    <Endpoints>
      <Endpoint Name="ServiceEndpoint" />
    </Endpoints>
    
    这种情况下代码里的监听器名称就必须是ServiceEndpoint,或者你也可以调整Manifest里的名称来匹配代码配置。

内容的提问来源于stack exchange,提问作者Walid Hanafy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:12:21