Ist es möglich zu definieren, welche URL ein Service anstelle des Standards fabric:/AppName/ServiceName
verwendet?Service Fabric Gibt die Fabric-URL an
Ich kann nicht finden, ob dies konfigurierbar ist oder nicht auf einer Anwendungsebene.
Ist es möglich zu definieren, welche URL ein Service anstelle des Standards fabric:/AppName/ServiceName
verwendet?Service Fabric Gibt die Fabric-URL an
Ich kann nicht finden, ob dies konfigurierbar ist oder nicht auf einer Anwendungsebene.
Ja, können Sie den Namen des Dienstes in der etwas ApplicationManifest.xml
zu anderen ändern, als der Name von den Klassennamen des Service gemacht.
Kurz: Ändern Sie einfach das name
Attribut in ApplicationManifest.xml
für diesen Dienst zu etwas anderem.
In Code: Wenn ich diesen Dienst:
public interface IJustAnotherStatelessService : IService
{
Task<string> SayHelloAsync(string someValue);
}
internal sealed class JustAnotherStatelessService : StatelessService, IJustAnotherStatelessService
{
// Service implementation
}
Registriert in Program.cs
wie folgt aus:
ServiceRuntime.RegisterServiceAsync("JustAnotherStatelessServiceType",
context => new JustAnotherStatelessService(context)).GetAwaiter().GetResult();
Und im ServiceManifest.xml
für diesen Dienst
<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest ...>
<ServiceTypes>
<!-- This is the name of your ServiceType.
This name must match the string used in RegisterServiceType call in Program.cs. -->
<StatelessServiceType ServiceTypeName="JustAnotherStatelessServiceType" />
</ServiceTypes>
...
Im ApplicationManifest.xml
Sie den vorgeschlagenen Namen erhalten:
<ApplicationManifest ...>
<DefaultServices>
<Service Name="JustAnotherStatelessService">
<StatelessService ServiceTypeName="JustAnotherStatelessServiceType" InstanceCount="[JustAnotherStatelessService_InstanceCount]">
<SingletonPartition />
</StatelessService>
</Service>
</DefaultServices>
</ApplicationManifest>
Dies wird Ihnen ein Uri Ihnen Service wie
fabric:/app_name/JustAnotherStatelessService
nun voran gehen und den Namen in der Anwendung manifestieren ändern:
<ApplicationManifest ...>
<DefaultServices>
<Service Name="AwesomeService">
<StatelessService ServiceTypeName="JustAnotherStatelessServiceType" InstanceCount="[JustAnotherStatelessService_InstanceCount]">
<SingletonPartition />
</StatelessService>
</Service>
</DefaultServices>
</ApplicationManifest>
Und Ihr Service antwortet nun auf
fabric:/app_name/AwesomeService
können Sie diesen uri Builder verwenden (ServiceUriBuilder.cs) Klasse von hier: https://github.com/Azure-Samples/service-fabric-dotnet-web-reference-app/blob/master/ReferenceApp/Common/ServiceUriBuilder.cs
Für staatenlos Service können Sie bequem die Proxy erhalten:
var serviceUri = new ServiceUriBuilder(ServiceName);
var proxyFactory = new ServiceProxyFactory();
var svc = proxyFactory.CreateServiceProxy<IServiceName>(serviceUri.ToUri());
Für Stateful-Service müssen Sie die Partition angeben .
var serviceUri = new ServiceUriBuilder(StatefulServiceName);
var proxyFactory = new ServiceProxyFactory();
//this is just a sample of partition 1 if you are using number partitioning.
var partition = new ServicePartitionKey(1);
var svc = proxyFactory.CreateServiceProxy<IStatefulServiceName>(serviceUri.ToUri(), partition);
Vielen Dank für die Antwort, ich glaube, ich war nicht klar mit meinen Anforderungen. Ich wollte wissen, ob Sie eine Anwendung auf 'Fabric:/foobarbazservice' hören können, aber ich denke nicht, dass dies möglich ist, da der Service-Resolver nach dem Servicetyp innerhalb des Anwendungstyps sucht und nicht zufällig einen auswählen kann ! – Mardoxx
Nein, in diesem Teil haben Sie Recht, Sie sind auf das Schema {applicationName}/{serviceName_set_in_ApplicationManifest} für die URL beschränkt. Ich sehe keine Möglichkeit, vollständig benutzerdefinierte URLs zu setzen, da der Fabric-Transport seine URL intern erstellt. – yoape