.NET Core ステートレス Service Fabric アプリケーション (v 3.0.467) を作成しました。このサービスには、KestrelCommunicationListener と ServiceProxy リモート呼び出しの両方を使用する必要があります。
アプリケーションをローカル クラスターにデプロイすると、例外がスローされます。
servicemanifest.xml ファイルで以下のように構成しました
<Resources>
<Endpoints>
<!-- This endpoint is used by the communication listener to obtain the port on which to
listen. Please note that if your service is partitioned, this port is shared with
replicas of different partitions that are placed in your code. -->
<Endpoint Name="ServiceEndpointV2" />
<Endpoint Protocol="http" Name="httpServiceEndpoint" Type="Input" Port="9098" />
</Endpoints>
</Resources>
コードサンプル:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[]
{
new ServiceInstanceListener((context) =>
{
// return new FabricTransportServiceRemotingListener(context, this);
return new FabricTransportServiceRemotingListener(context, this,new Microsoft.ServiceFabric.Services.Remoting.FabricTransport.Runtime.FabricTransportRemotingListenerSettings(){EndpointResourceName = "ServiceEndpointV2" });
}),
new ServiceInstanceListener(serviceContext =>
new KestrelCommunicationListener(serviceContext, "httpServiceEndpoint", (url, listener) =>
{
ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}");
return new WebHostBuilder()
.UseKestrel()
.ConfigureServices(
services => services
.AddSingleton<StatelessServiceContext>(serviceContext))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
.UseUrls(url)
.Build();
}))
};
}
この設定に間違いはありませんか?
アップデート:
以下のコードは、クライアントから呼び出すサービス サンプル メソッドです。
public Task<string> OnRouteMessageaAsync(string tenant)
{
return Task.FromResult(tenant);
}
クライアントコード:
private async Task<string> RemoteServiceCall()
{
try
{
var client = ServiceProxy.Create<ICommunication>(new Uri("fabric:/AuthenticationServiceApp/AuthenticationServiceApi"), listenerName: "RemotingListener");
var response = client.OnRouteMessageaAsync("tenant");
return response.Result;
}
catch (Exception ex)
{
}
return null;
}
サンプル コードは次の GitHub リンクにあります: serviceappcode