Azure service fabric 我可以从集群外部但在同一本地网络中使用RPC调用无状态服务吗?

Azure service fabric 我可以从集群外部但在同一本地网络中使用RPC调用无状态服务吗?,azure-service-fabric,azure-cloud-services,Azure Service Fabric,Azure Cloud Services,在Visual Studio 2017的本地计算机上,我基于.NET核心无状态服务模板创建了解决方案,并添加了Microsoft.ServiceFabric.Services.Remoting.Runtime包以通过RPC接受远程调用 protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() { return this.CreateServiceRemoti

在Visual Studio 2017的本地计算机上,我基于.NET核心无状态服务模板创建了解决方案,并添加了Microsoft.ServiceFabric.Services.Remoting.Runtime包以通过RPC接受远程调用

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
    return this.CreateServiceRemotingInstanceListeners();
}
我将接口的实现添加到无状态服务中,并创建了另一个项目,.NET核心控制台客户端来运行该服务。控制台将在集群外部运行

static void Main(string[] args)
{
    ITestAccUp testAccUpClient = ServiceProxy.Create<ITestAccUp>(new Uri("fabric:/SFAccountUpTest/Stateless1"));

    testAccUpClient.NotifyAsync().Wait();
}
static void Main(字符串[]args)
{
ITestAccUp testAccUpClient=ServiceProxy.Create(新Uri(“结构:/SFAccountUpTest/Stateless1”);
testAccUpClient.NotifyAsync().Wait();
}
但是,当我运行它时,我收到错误“InvalidCastException:无法将'System.\u ComObject'类型的COM对象强制转换为接口类型'IFabricTestManagementClient4'。此操作失败,因为对IID'{B96AA7D4-ACC0-4814-89DC-561B0CB6028}接口的COM组件的QueryInterface调用'由于以下错误而失败:不支持此类接口(来自HRESULT:0x80004002(E_NOINTERFACE)的异常)。', 尽管命名应用程序结构:/SFAccountUpTest/Stateless1似乎已启动并运行

我想问题是RPC调用只是为了调用SF集群内部的服务,而不是外部的服务。是否可以在集群外部进行RPC调用,或者是否需要构建某种web API来进行服务调用


只要您在同一个网络上,您就可以使用其他应用程序的SF远程处理来调用服务和参与者。例如,请参见出于测试目的而这样做的项目

确保使用的DLL与保存客户端和服务项目接口定义的DLL相同。(它的工作原理与WCF不同,WCF可以使用wsdl独立于服务生成代理。)


可能您遇到了一个问题,比如一个或一个。

我意识到这个问题有点老了,但我解决这个问题的方法是确保我使用的是“V2”远程处理堆栈()

基本上,您需要编辑ServiceManifest.xml以将其用作端点:

<Resources>
  <Endpoints>
    <Endpoint Name="ServiceEndpointV2" />  
  </Endpoints>
</Resources>

谢谢你的回复。它在同一台计算机上运行。是的,这是相同的解决方案,DLL在这两个项目之间共享。关于解决类似问题的这两个链接:1)它是void无参数方法,因此没有类型转换;2)所有项目共享相同的最新版本的Service.Remoting Library 3.2.176和相同的SDK.net core 2.1。我已经附上了这个问题的截图。我认为,如果RPC调用确实允许,我的问题是某种系统权限的问题,使调用在任何地方都使用相同的net core应用程序版本。您的服务有2.1.3版本。我将Microsoft.ServiceFabric.Services软件包降级为3.0.472,并将其改为SDK 2.1(vs 2.1.3),之后它就可以正常工作了。我对微软SDK的脆弱性感到有点震惊:即使是小版本中的差异也会导致客户端和服务不兼容,并且没有明确的消息说明发生了什么。作为一个服务织物的初学者,这让我很害怕development@LoekD此信息似乎与您的答案相矛盾,您的答案还询问了来自集群外部的服务远程处理。除了这个问题中的单一网络限制之外,我是否在其中一个问题中遗漏了一些细微差别?我相信我是从网络之外打电话的感觉来回答的。问题中没有太多信息。
<Resources>
  <Endpoints>
    <Endpoint Name="ServiceEndpointV2" />  
  </Endpoints>
</Resources>
...
using Microsoft.ServiceFabric.Services.Remoting;
using Microsoft.ServiceFabric.Services.Remoting.FabricTransport;

[assembly: FabricTransportServiceRemotingProvider(RemotingListenerVersion = RemotingListenerVersion.V2, RemotingClientVersion = RemotingClientVersion.V2)]
namespace ClassLibrary1
{
    public interface IMyService : IService
    {
        ...