azure-service-fabric - 我可以从集群外部但在同一个本地网络中使用 RPC 调用无状态服务吗?
问题描述
在我的本地机器上的 Visual Studio 2017 中,我创建了基于 .NET Core 无状态服务模板的解决方案,并添加了 Microsoft.ServiceFabric.Services.Remoting.Runtime 包以通过 RPC 接受远程调用。
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return this.CreateServiceRemotingInstanceListeners();
}
然后我在一个单独的项目中添加了接口 ITestAccUp:
public interface ITestAccUp : IService
{
Task NotifyAsync();
}
我将接口的实现添加到无状态服务中,并创建了另一个项目,即 .NET Core 控制台客户端来运行该服务。控制台将在集群外运行。
static void Main(string[] args)
{
ITestAccUp testAccUpClient = ServiceProxy.Create<ITestAccUp>(new Uri("fabric:/SFAccountUpTest/Stateless1"));
testAccUpClient.NotifyAsync().Wait();
}
但是,当我运行它时,我收到错误“InvalidCastException:无法将类型为“System.__ComObject”的 COM 对象转换为接口类型“IFabricTestManagementClient4”。此操作失败,因为对具有 IID 的接口的 COM 组件调用 QueryInterface '{ B96AA7D4-ACC0-4814-89DC-561B0CBB6028}' 由于以下错误而失败:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE))。” ,尽管 Named Application fabric:/SFAccountUpTest/Stateless1 似乎已启动并正在运行。
我想问题是 RPC 调用只是为了调用 SF 集群内部的服务,而不是外部。是否可以在集群外部进行 RPC 调用,或者是否需要构建某种 Web API 来进行服务调用?
解决方案
推荐阅读
- flutter - flutter_smart_cropper 使用-sdk:minSdkVersion 16 不能小于库中声明的版本 19
- javascript - 如果孩子包含活动课程,则打开父母下拉菜单?
- sql - 使用 Azure 的可能 INSERT 语句优化查询执行时间
- osgi - 已解决 - Eclipse 4 产品从 Oxygen 迁移到 Eclipse 2020-06:ClassNotFoundException
- sorting - 如何获取具有相同名称的元素并根据 XSLT 中的子节点值对它们进行排序
- c# - 如何修复应用程序中的分辨率?
- angular - 无法在 NgFor 循环中获取 API 数据
- python - 根据论文中的说明对编码器-解码器进行建模
- python-3.x - 将 .xlsx 文件保存到 ec2,得到一个空文件作为响应
- r - 将某列的字符修剪到一定长度