在Visual Studio 2017中的本地计算机上,我基于.NET Core Stateless Service模板创建了解决方案,并添加了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'。此操作失败,因为QueryInterface调用COM组件上的IID为{{由于以下错误,B96AA7D4-ACC0-4814-89DC-561B0CBB6028}'失败:没有支持这样的接口(HRESULT异常:0x80004002(E_NOINTERFACE))。“,虽然命名应用程序结构:/ SFAccountUpTest / Stateless1似乎已启动并运行。
我想问题是RPC调用仅用于调用SF集群内的服务,而不是外部调用。是否可以在集群外部进行RPC调用,或者是否需要构建某种Web API来进行服务调用?