2017-02-09 2 views

ответ

0

Да, вы можете изменить имя сервиса в ApplicationManifest.xml на что-то другое, чем имя, взятое из имени класса службы.

Короткие: просто измените атрибут name в ApplicationManifest.xml для этого сервиса на что-то еще.

В коде: Если у меня есть этот сервис:

public interface IJustAnotherStatelessService : IService 
{ 
    Task<string> SayHelloAsync(string someValue); 
} 

internal sealed class JustAnotherStatelessService : StatelessService, IJustAnotherStatelessService 
{ 
    // Service implementation 
} 

На учете в Program.cs так:

ServiceRuntime.RegisterServiceAsync("JustAnotherStatelessServiceType", 
    context => new JustAnotherStatelessService(context)).GetAwaiter().GetResult(); 

И в ServiceManifest.xml для этой службы

<?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> 
... 

В ApplicationManifest.xml вы получите предложенное имя:

<ApplicationManifest ...> 
    <DefaultServices> 
    <Service Name="JustAnotherStatelessService"> 
     <StatelessService ServiceTypeName="JustAnotherStatelessServiceType" InstanceCount="[JustAnotherStatelessService_InstanceCount]"> 
     <SingletonPartition /> 
     </StatelessService> 
    </Service> 
    </DefaultServices> 
</ApplicationManifest> 

Это даст вам Ури вам обслуживание как

fabric:/app_name/JustAnotherStatelessService 

Теперь, идти вперед и изменить имя в манифесте приложения:

<ApplicationManifest ...> 
    <DefaultServices> 
    <Service Name="AwesomeService"> 
     <StatelessService ServiceTypeName="JustAnotherStatelessServiceType" InstanceCount="[JustAnotherStatelessService_InstanceCount]"> 
     <SingletonPartition /> 
     </StatelessService> 
    </Service> 
    </DefaultServices> 
</ApplicationManifest> 

И ваша служба в настоящее время отвечает на

fabric:/app_name/AwesomeService 
+0

Благодарим вас за ответ, я считаю, что я не совсем понял свои требования. Я хотел знать, можете ли вы заставить приложение прослушивать 'fabric:/foobarbazservice', но я не думаю, что это возможно, поскольку служебный resolver ищет тип службы внутри типа приложения и не может, скажем, выбрать один случайным образом ! – Mardoxx

+1

Нет, в этой части вы правы, вы ограничены схемой {applicationName}/{serviceName_set_in_ApplicationManifest} для URL-адреса. Я не вижу никакого способа установить полностью настраиваемые URL-адреса, учитывая, как транспортный механизм создает свой Url internaly. – yoape

0

Вы можете использовать этот Uri строитель (ServiceUriBuilder.cs) класс здесь: https://github.com/Azure-Samples/service-fabric-dotnet-web-reference-app/blob/master/ReferenceApp/Common/ServiceUriBuilder.cs

для лиц без обслуживания вы можете легко получить прокси:

var serviceUri = new ServiceUriBuilder(ServiceName); 
var proxyFactory = new ServiceProxyFactory(); 
var svc = proxyFactory.CreateServiceProxy<IServiceName>(serviceUri.ToUri()); 

Для сохранения состояния сервиса вы должны указать раздел ,

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); 
Смежные вопросы