2017-10-11 47 views
2

我有一個Asp.net核心2.0無狀態服務和服務結構6上的Asp.net Core 2.0有狀態服務,有10個分區計數。客戶端試圖連接到服務結構ServiceProxy上的無效地址

我跟着這個教程

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-add-a-web-frontend

我,不同的是我用Visual Studio中的模板的所有步驟,其中當我打電話給我的服務在 CreateServiceReplicaListeners使用KestrelCommunicationListener

protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners() 
    { 
     return new ServiceReplicaListener[] 
     { 
      new ServiceReplicaListener(serviceContext => 
       new KestrelCommunicationListener(serviceContext, (url, listener) => 
       { 
        return new WebHostBuilder() 
           .UseKestrel() 
           .ConfigureServices(
            services => services 
             .AddSingleton<StatefulServiceContext>(serviceContext) 
             .AddSingleton<IReliableStateManager>(this.StateManager)) 
           .UseContentRoot(Directory.GetCurrentDirectory()) 
           .UseStartup<Startup>() 
           .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseUniqueServiceUrl) 
           .UseUrls(url) 
           .Build(); 
       })) 
     }; 
    } 

使用此代碼的Asp.net Core 2.0無狀態服務:

var service = ServiceProxy.Create<IStorageService>(new Uri("fabric:/MyCluster/Storage"), new ServicePartitionKey(Fnv1aHashCode.Get64bitHashCode(User.Id))); 
await service.MyMethod(); 

調用「的MyMethod」

客戶端試圖連接到無效的地址http://localhost:58352/etc時將引發異常..

存在異常的URL存在於服務織物Explorer和Port和PartitionKey是正確的。 在ServiceManifest中沒有設置終端節點,因爲有狀態服務基本上只是模板,並且根據上面的教程添加了IService接口和MyMethod方法。

我在這裏錯過了什麼? Asp.net Core 2.0的文檔不是最新的。

我試圖不使用分區,設置ServicePartitionKey(0)但結果相同。

我不知道該怎麼做。

回答

4

你混合兩種完全不同的通信協議棧:

你不能混合兩者。您需要使用HTTP客戶端與您的服務的HTTP端點進行通話。服務結構中有一個HTTP reverse proxy,它將執行服務發現和請求轉發,以使您更容易。還有一個DNS service,它允許您使用簡單的DNS名稱尋址其他服務。

在您引用的教程,後端服務使用服務Remoting的偵聽器暴露了RPC端點ServiceProxy連接到:

protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners() 
{ 
    return new List<ServiceReplicaListener>() 
    { 
     new ServiceReplicaListener(
      (context) => 
       this.CreateServiceRemotingListener(context)) 
    }; 
} 
+0

謝謝,我混淆了兩個棧。 您可以共享代碼或文檔,瞭解如何使用KestrelCommunicationListener公開的HTTP端點調用暴露的端點? –

相關問題